Javascript 试图找出比较两个对象数组并为每个匹配添加属性的更简洁的方法
我有两个单独的对象数组作为数据响应返回。我目前正在比较两个数组中具有匹配ID的所有项,并从array2中的项获取属性,然后将它们添加到array1中的匹配项中 现在我正在使用嵌套的Javascript 试图找出比较两个对象数组并为每个匹配添加属性的更简洁的方法,javascript,Javascript,我有两个单独的对象数组作为数据响应返回。我目前正在比较两个数组中具有匹配ID的所有项,并从array2中的项获取属性,然后将它们添加到array1中的匹配项中 现在我正在使用嵌套的for循环来完成这个任务,但我讨厌使用嵌套循环,我正在尝试找出是否有更干净的方法来编写这个 到目前为止,这是我的职责和工作: for(变量i=0;i{ 让arr2Key=array2.map(obj2=>obj2[key]); 返回array1.map(obj1=>{ 设idx=arr2Key.indexOf(obj1
for
循环来完成这个任务,但我讨厌使用嵌套循环,我正在尝试找出是否有更干净的方法来编写这个
到目前为止,这是我的职责和工作:
for(变量i=0;i
将其中一个转化为对象或地图,通过id
索引,然后迭代另一个,O(n)
matchMerge(array1,array2,key)
参数:
array1
对象数组array2
对象数组键
要匹配的键的字符串.map()
键
值与arr2Key
值的任何匹配项,并获取索引或-1idx
大于-1,则使用扩展运算符…
从两个数组返回合并对象,否则从array1
const arr1=[{name:“一个安静的地方”,id:“123”},{name:“甜食”,id:“456”},{name:“我爱你,伙计”,id:“789”},{group:“恐怖”,id:“123”},{group:“幻想”,id:“456”},{group:“喜剧”,id:“789”},{group:“其他一切”,id:“001”};
const cloner=(…arrayOfArrays)=>JSON.parse(JSON.stringify(arrayOfArrays));
常量匹配合并=(数组1,数组2,键)=>{
让arr2Key=array2.map(obj2=>obj2[key]);
返回array1.map(obj1=>{
设idx=arr2Key.indexOf(obj1[key]);
返回idx>-1?{…obj1,…array2[idx]}:obj1
});
}
设AA=cloner(arr1,arr2);
log(matchMerge(AA[0],AA[1],'id');
控制台日志(arr1);
控制台日志(arr2)代码>我认为最好通过返回带有浅克隆的新数组来避免对源数组进行变异。@tomgood point,添加了一个helper函数。
for (var i = 0; i < arr2.length; i++) {
for (var k = 0; k < arr1.length; k++) {
if (arr2[i].id === arr1[k].id) {
arr1[k].group = arr2[i].group;
break;
}
}
}
const objs1ById = Object.fromEntries(
arr1.map(obj => [obj.id, obj])
);
for (const obj2 of arr2) {
const obj1 = objs1ById[obj2.id];
if (obj1) obj1.group = obj2.group;
}
let arr2Key = array2.map(obj2 => obj2[key]);
let idx = arr2Key.indexOf(obj1[key]);
return idx > -1 ? { ...obj1, ...array2[idx]} : obj1