js配列中のオブジェクトはどうやって結合しますか?
9353 ワード
配列結合var list=[{id:1,number:2,title:2},{id:1,number:3,title:2}]
function merge (list){
let result=[ ]
let cache={ }
list.forEach(item=>{
let key= id:${item.id},title${item.title}
let index= cache[key]
if(index !==undefined){
result[index].number +=item.number
}else{
result.push(object.assign({ }, item))
cache[key]=result.length - 1
}
})
return result
}
merge(list)
concat統合
var a=[1,2,3],b=[4,5,6]
var c=a.co ncat(b)
consolone.log(c)//1,2,3,4,5
consolone.log(a)//1,2,3は自分を変えない
巡回巡回
var arr 1=''a'、'b';
var arr 2=[c',d',e']
for(var i=0;i)
arr 1.push(arr 2[i])
}
consolie.log(arr 1)/''a','b','c','d',e''
appy
配列arr 1と配列arr 2を結合し、Aray.prototype.push.appy(arr 1,arr 2)を使用します. あるいはarr 1.push.appy(arr 1,arr 2);
var arr 1=''a'、'b';
var arr 2=[c',d',e']
Aray.prototype.push.appy(arr 1,arr 2)
または
arr 1.push.appy(arr 1,arr 2)
consolie.log(arr 1)/''a','b','c','d',e''
オブジェクトの結合
$exted()
var obj 1={'a':1}
var obj 2={'b':2}
var c=$exted(obj 1,obj 2)
consolone.logs(obj 1)/{a:1,b:2}、/obj 1はすでに修正されています.
または
var obj 3=$exted({}obj 1,obj 2);
consolove.log(obj 3)/{a:1,b:2}obj 1は変わらない、obj 2
遍歴
var obj 1={'a':1}
var obj 2=''b':2,'c':3';
for(var key in obj 2){
if(obj 2.hasOwn Property(key)==true){
//hasOwnPropertyは、自己属性を判断し、for inを使用してオブジェクトを巡回する属性の場合、
プロトタイプチェーン上のすべての属性は、プロトタイプオブジェクトの拡張による干渉を避けるためにアクセスされます.
obj 1[key]=obj 2[key]
}
}
Obj.assigin()
任意の複数のソースオブジェクト自身のエニュメレート・属性を対象オブジェクトにコピーし、対象オブジェクトに戻ります.
使用:Object.assign
var obj={a:1,b:2}
var copyObj=Object、assign({}Obj);
consolie.logs(copyObj)//{a:1,b:2}
var o 1={a:1}
var o 2={b:2}
var o 3={c:3}
var obj=Object.assign(o 1,o 2,o 3)
consolone.log(obj)/{a:1,b:2,c:3}
consolone.log(o 1) //{a:1、b:2、c:3}と、ターゲット自体が変わります.
オブジェクトの浅いコピー
var obj 1={'a':1}
var obj 2=''b':''b 1':22,'b 2':33';
$.exted(obj 1、obj 2) //Obj 1はObj 2の属性をコピーしました.
consolone.log(obj 1) //{a':1,'b'{'b 1':22,'b 2':33}
consolone.log(obj 1.b.b 1) //22
bb.b 1=44 //Obj 2は再割当されます
consolone.log(OB 1.b.b 1) //44 obj.bは対象のガイドラインのみコピーしていますので、元obj 2の影響を受けます.
オブジェクトの深度コピー
var obj 1={'a':1}
var obj 2=''b':''b 1':22,'b 2':33';
$.exted(true,obj 1,obj 2) //最初のパラメータ設定はtrueで深度コピーを表します.
consolone.log(obj 1) //{a':1,'b':{'b 1':22,'b 2':33}
consolone.log(obj 1.b.b 1) //22
bb.b 1=44 //Obj 2再割当
consolone.log(obj 1.b.b 1) //22 obj 1コピーのobj 2のすべての属性と値は、obj 2の影響を受けません.