【发布时间】:2018-09-04 14:26:26
【问题描述】:
我有一个 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"
}
]
}
]
结果不一样。
【问题讨论】:
-
请访问help center,使用tour查看内容和How to Ask。做一些研究,搜索关于 SO 的相关主题;如果您遇到困难,请发布您的尝试minimal reproducible example,并注明输入和预期输出。
-
@mplungjan 修正了等号中的错字...我需要一个权威的答案来看看最快的方法是什么。
-
这里不是主题。 Codereview 或许
-
@mplungjan 好的,请关闭它,将其移至 codereview
-
@mplungjan 不! “当前没有返回我想要的” 意味着代码没有按预期工作,这是代码审查的一个密切原因。
标签: javascript arrays multidimensional-array ecmascript-6