js根据需求合并两个数组对象
var a = [{ id: 1, num: 1 }, { id: 2, num: 3 }, { id: 3, num: 4 }]var b = [{ id: 2, num: 1 }, { id: 3, num: 1 }]
a为原数组,b为新数组,a、b数组的长度不固定
a数组的num值可以被操作,b数组的num值每次必定都是1
b数组每一次和a数组合并,要求:
1、如果b数组的某一项在a数组中不存在,就插入到a数组中
2、如果b数组的某一项在a数组中存在,保留a数组中的某一项,删除b数组的某一项
3、b数组中插入到a数组中的新数据和a数组中已存在的数据要重新排在数组前面
以上需求合并,结果应为
[{ id: 2, num: 3 }, { id: 3, num: 4 }, { id: 1, num: 1 }]
回答:
我理解为这样
var a = [ { id: 1, num: 1 },
{ id: 2, num: 3 },
{ id: 3, num: 4 },
{ id: 6, num: 5 }
];
var b = [
{ id: 2, num: 1 },
{ id: 3, num: 1 }
];
const c = b.map(item => {
return a.find(r => r.id === item.id) || item;
});
console.log([...c, ...a.filter(r => !b.some(r1 => r1.id == r.id))]);
回答:
js">var a = [{ id: 1, num: 1 }, { id: 2, num: 3 }, { id: 3, num: 4 }];var b = [{ id: 2, num: 1 }, { id: 3, num: 1 }];
// 先根据 b 数组的内容进行映射,如果 a 中有的取 aIt,没有的取 bIt
const result1 = b.map(bIt => a.find(aIt => aIt.id === bIt.id) ?? bIt);
// 从 a 数组中排除掉 b 数据中已有的内容,准备着放后面
const result2 = a.filter(it => !b.find(bIt => bIt.id === it.id));
// 连接两个结果 —— 直接用表达式替换掉 result1 和 result2 就可以一句话写完
const result = [...result1, ...result2];
console.log(result);
写完了发现就是 @林枫 的答案……哈哈哈哈!
但是写都写了,就贴出来吧
回答:
arr = newArr.concat(arr)let idArr = arr.map(item => { return item.id })
for (let i = 0; i < idArr.length; i++) {
if (idArr.lastIndexOf(idArr[i]) !== i) {
let temp = arr[idArr.lastIndexOf(idArr[i])]
arr[idArr.lastIndexOf(idArr[i])] = arr[idArr.indexOf(idArr[i])]
arr[idArr.indexOf(idArr[i])] = temp
arr.splice(idArr.lastIndexOf(idArr[i]), 1);
idArr = arr.map(item => { return item.id })
i--;
}
}
console.log(arr)
以上是 js根据需求合并两个数组对象 的全部内容, 来源链接: utcz.com/p/936839.html