js根据需求合并两个数组对象

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

回到顶部