我有这个数组:
const array = [
{
'12345': [
{ name: 'item one', numbers: ['12345', '77484'] },
{ name: 'item two', numbers: ['12345', '65456'] },
{ name: 'item three', numbers: ['12345', '33920'] },
{ name: 'item four', numbers: ['12345', '99393'] }
],
'67890': [
{ name: 'item one b', numbers: ['67890', '33232'] },
{ name: 'item two b', numbers: ['67890', '33456'] },
{ name: 'item three b', numbers: ['67890', '77665'] },
{ name: 'item four b', numbers: ['67890', '11234'] }
]
}
]
这个对象:
const newItem = { name: 'It is a new item', numbers: ['12345'] }
在数组中可以看到,它包含一个对象,该对象包含两个对象数组。每个嵌套数组的键都是一个数字,如您所见,键号也包含在每个项目的numbers数组中,例如:
{ name: 'item one', numbers: ['12345', '77484'] },
该键的数字数组中包含键'12345'
,因此'12345'
是该对象的父级。
我想获取newItem
的数字,将其与父键匹配,然后将其添加到与匹配键的父键对应的数组中。
请考虑到这是伪数据,并假设newItem
中的numbers数组是动态值,并且嵌套的数组有很多值。这里的想法是使这两个数字匹配以知道应将newItem推送到何处。
答案 0 :(得分:2)
尝试:
array.map((row) => {
Object.keys(row).map((value) => {
if (newItem.numbers.indexOf(value) >= 0) {
row[value].push(newItem);
}
});
});
答案 1 :(得分:1)
您可以这样做:
for (let i=0; i<array.length; i++) {
array[i][newItem.numbers[0]] = array[i][newItem.numbers[0]] || [];
array[i][newItem.numbers[0]].push(newItem);
}
如果嵌套数组不存在,第一行将对其进行初始化。第二行将新项目推送到嵌套数组。
请参见下面的代码段。
const array = [
{
'12345': [
{ name: 'item one', numbers: ['12345', '77484'] },
{ name: 'item two', numbers: ['12345', '65456'] },
{ name: 'item three', numbers: ['12345', '33920'] },
{ name: 'item four', numbers: ['12345', '99393'] },
],
'67890': [
{ name: 'item one b', numbers: ['67890', '33232'] },
{ name: 'item two b', numbers: ['67890', '33456'] },
{ name: 'item three b', numbers: ['67890', '77665'] },
{ name: 'item four b', numbers: ['67890', '11234'] },
],
}
]
const newItem = {
name: 'It is a new item',
numbers: ['12345'],
}
for (let i=0; i<array.length; i++) {
array[i][newItem.numbers[0]] = array[i][newItem.numbers[0]] || [];
array[i][newItem.numbers[0]].push(newItem);
}
console.log(array);
答案 2 :(得分:1)
借助解构。
const [obj] = array;
const {
numbers: [key],
} = newItem;
obj[key].push(newItem);
const array = [
{
"12345": [
{
name: "item one",
numbers: ["12345", "77484"],
},
{
name: "item two",
numbers: ["12345", "65456"],
},
{
name: "item three",
numbers: ["12345", "33920"],
},
{
name: "item four",
numbers: ["12345", "99393"],
},
],
"67890": [
{
name: "item one b",
numbers: ["67890", "33232"],
},
{
name: "item two b",
numbers: ["67890", "33456"],
},
{
name: "item three b",
numbers: ["67890", "77665"],
},
{
name: "item four b",
numbers: ["67890", "11234"],
},
],
},
];
const newItem = {
name: "It is a new item",
numbers: ["12345"],
};
const [obj] = array;
const {
numbers: [key],
} = newItem;
obj[key].push(newItem);
console.log(array);
答案 3 :(得分:0)
const array = [
{
'12345': [
{ name: 'item one', numbers: ['12345', '77484'] },
{ name: 'item two', numbers: ['12345', '65456'] },
{ name: 'item three', numbers: ['12345', '33920'] },
{ name: 'item four', numbers: ['12345', '99393'] }
],
'67890': [
{ name: 'item one b', numbers: ['67890', '33232'] },
{ name: 'item two b', numbers: ['67890', '33456'] },
{ name: 'item three b', numbers: ['67890', '77665'] },
{ name: 'item four b', numbers: ['67890', '11234'] }
]
}
]
const newItem = { name: 'It is a new item', numbers: ['12345'] }
newItem.numbers.forEach(n => array[0]?.[n].push(newItem));
console.log(array);