gpt4 book ai didi

javascript 使用 ids 列表从嵌套数组中提取对象

转载 作者:行者123 更新时间:2023-11-28 12:59:30 24 4
gpt4 key购买 nike

我有一个 id 列表作为引用,并且我有一个对象,其中包含多个具有对象数组的对象。

我想以最快的方式在列表中创建一个具有相应 id 的对象数组。

const data = {
"items": {
"item1": [{
"id": "id1",
"info": "info1"
},
{
"id": "id2",
"info": "info22"
}
],
"item20": [{
"id": "id3",
"info": "info5"
}],
"item5": [{
"id": "id4",
"info": "info6"
},
{
"id": "id5",
"info": "info7"
}
]
}
};

const keep = ['id4', 'id2'];
const results = [];
keep.forEach(function(val) {

const match = Object.keys(data.items).map(item => {
return data.items[item].find(obj => obj.id === val)
});
results.push(match)
})
console.log('final: ', results)

当前没有返回我想要的。预期结果将是:

[
{
"id": "id2",
"info": "info22"
},
{
"id": "id4",
"info": "info6"
}
]

更新:

如果数据本身就是一个对象数组,并且我们希望对每个对象执行相同的操作,情况又如何?

    const data = [{
"otherStuff": "otherB",
"items": {
"item1": [{
"id": "id1",
"info": "info1"
},
{
"id": "id2",
"info": "info22"
}
],
"item20": [{
"id": "id3",
"info": "info5"
}],
"item5": [{
"id": "id4",
"info": "info6"
},
{
"id": "id5",
"info": "info7"
}
]
}
}, {
"otherStuff": "otherA",
"items": {
"item1": [{
"id": "id1",
"info": "info10000"
},
{
"id": "id2",
"info": "info220000"
}
],
"item20": [{
"id": "id3",
"info": "info5000"
}],
"item5": [{
"id": "id4",
"info": "info60000"
},
{
"id": "id5",
"info": "info7000"
}
]
}
}];


const keep = ['id4', 'id2'];
const results = [];

keep.forEach(function(val) {
data.forEach(function(entry){
Object.keys(entry.items).forEach(item => {
var match = entry.items[item].find(obj => obj.id === val);
if (match) {
results.push(match)
}
});
});
})

console.log(results)

输出应该是:

[
{
"otherStuff": "otherB",
"items": [
{
"id": "id2",
"info": "info22"
},
{
"id": "id4",
"info": "info6"
}
]
},
{
"otherStuff": "otherA",
"items": [
{
"id": "id2",
"info": "info220000"
},
{
"id": "id4",
"info": "info60000"
}
]
}
]

结果并不一样。

最佳答案

如果使用 Set 来保存 id,则可以节省一次 O(n) 遍历:

 const keep = new Set(['id4', 'id2']);

const result = [];

for(const items of Object.values(data.items))
for(const item of items)
if(keep.has(item.id))
result.push(item);

关于javascript 使用 ids 列表从嵌套数组中提取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52168525/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com