查找对象关键字名称并将对象添加到匹配的数组中



我有这个数组:

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'] }

正如您在数组中看到的,它包含一个对象,该对象包含两个对象数组。每个嵌套数组的键都是一个数字,正如您所看到的,键号也包含在每个项目的数字数组中,例如:

{ name: 'item one', numbers: ['12345', '77484'] },

在其数字数组中包含关键字'12345',因此'12345'是该对象的父对象。

我想取newItem的编号,将其与父关键字匹配,并将其添加到与匹配关键字父关键字对应的数组中。

请考虑到这是伪数据,并假设newItem中的数字数组是一个动态值,嵌套数组有很多值。这里的想法是匹配这两个数字,以知道newItem应该推送到哪里。

试试看:

array.map((row) => {
Object.keys(row).map((value) => {
if (newItem.numbers.indexOf(value) >= 0) {
row[value].push(newItem);
}
});
});

您可以这样做:

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);

借助于析构函数。

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);

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);

最新更新