需求
二维嵌套数组,将数组a[{id:‘1’,names:[{nid:‘a1’,a:'‘亿‘,b:‘二’},{nid:‘a2’,a:’‘亿2‘,b:‘二2’}]},{id:‘2’,names:[{nid:‘a11’,a:’‘亿‘,b:‘二’},{nid:‘a22’,a:’‘亿23‘,b:‘二3’}]}],比对数组ba[{id:‘1’,names:[{nid:‘a1’,a:’‘1亿‘,b:‘二’,c:“ss”},{id:‘2’,names:[{nid:‘a2’,a:’'1亿1‘,b:‘二’,c:“ss”}]}]后将ba数组中的names中的a和c值赋值给a数组中names[]中nid相同的值
分析
在这个情况下,我们需要根据 id 和 nid 来匹配 a 数组和 ba 数组中的 names 对象。下面是具体的实现步骤:
遍历 ba 数组。
对于每个元素,查找 a 数组中具有相同 id 的元素。
如果找到,则根据 nid 匹配 names 对象,并更新相应的 a 和 c 属性。
示例代码
// 原始数组 a
const a = [
{ id: '1', names: [{ nid: 'a1', a: '亿', b: '二' }, { nid: 'a2', a: '亿2', b: '二2' }] },
{ id: '2', names: [{ nid: 'a11', a: '亿', b: '二' }, { nid: 'a22', a: '亿23', b: '二3' }] },
];
// 数组 ba,用于与 a 数组进行比较
const ba = [
{ id: '1', names: [{ nid: 'a1', a: '1亿', b: '二', c: "ss" }] },
{ id: '2', names: [{ nid: 'a22', a: '1亿1', b: '二', c: "ss" }] },
];
function updateValues(a, ba) {
// 遍历 ba 数组
ba.forEach(itemBa => {
// 查找 a 数组中 id 相同的项
const itemA = a.find(itemA => itemA.id === itemBa.id);
if (itemA) {
// 更新 names 数组中的值
itemBa.names.forEach(nameObjBa => {
// 查找具有相同 nid 的 names 对象
const nameObj = itemA.names.find(nameObj => nameObj.nid === nameObjBa.nid);
if (nameObj) {
nameObj.a = nameObjBa.a;
nameObj.c = nameObjBa.c; // 添加新属性 c
}
});
}
});
return a;
}
// 调用函数更新 a 数组
const updatedA = updateValues(a, ba);
console.log(updatedA);
输出结果
执行上述代码后,a 数组将会被更新为:
[
{ id: '1', names: [{ nid: 'a1', a: '1亿', b: '二', c: 'ss' }, { nid: 'a2', a: '亿2', b: '二2' }] },
{ id: '2', names: [{ nid: 'a11', a: '亿', b: '二' }, { nid: 'a22', a: '1亿1', b: '二', c: 'ss' }] },
]。
注意事项
- 这个示例假设 ba 数组中的每个 id 下的 names 数组可能包含一个或多个对象。如果 ba 数组中的 names
数组有多个对象,那么需要相应地调整逻辑以确保正确匹配。 - 如果 a 数组中的 names 数组长度不一致,可能需要额外处理这种情况。