我有现有的数组,并且想向 ID 匹配的每个项目添加另一个对象数组。
var existingData = [
{
"id": "0100",
"name": "name 1",
"message": [
"Lorem blah blah 1",
"Lorem blah blah 1.1"
]
},
{
"id": "0200",
"name": "name 2",
"message": [
"Lorem blah blah 2",
"Lorem blah blah 2.1",
"Lorem blah blah 2.2"
]
},
{
"id": "0300",
"name": "name 3",
"message": [
"Lorem blah blah 3",
"Lorem blah blah 3.1",
"Lorem blah blah 3.2",
"Lorem blah blah 3.3",
"Lorem blah blah 3.4"
]
}
];
下面的数组是我的第二个数组,其中“relatedId”将与现有数组中的 ID 相同:
var data2 = [
{"CandidateName": "Mary", "relatedId": ["0100", "0200"]},
{ "CandidateName": "John", "relatedId": ["0200"]},
{ "CandidateName":"Peter", "relatedId": ["0300", "0100"]},
{ "CandidateName": "Paul", "relatedId": ["0300"]}
];
如果 ID 匹配,我想从 data2 中提取“CandidateName”并将其放入现有数据中。
此特定问题已从此处扩展 => Group Javascript array of objects by ID
我已经尝试过了,但由于浏览器挂起,我并没有走得太远:
var result = data.reduce(function(r, el) {
// THIS INNER LOOP MAKES THE BROWSER HANG!!!
data2.forEach(function (a){
console.log('a',a);
});
var e = el.id.slice(0, 2);
if (!o[e]) {
o[e] = {
id: el.id,
name: el.name,
message: []
}
r.push(o[e]);
}
o[e].message.push(el.message);
return r;
}, [])
所以我想以这样的方式结束:
var existingData = [
{
"id": "0100",
"name": "name 1",
"message": [
"Lorem blah blah 1",
"Lorem blah blah 1.1"
],
"CandidateName": ["Mary", "Peter"]
},
{
"id": "0200",
"name": "name 2",
"message": [
"Lorem blah blah 2",
"Lorem blah blah 2.1",
"Lorem blah blah 2.2"
],
"CandidateName": ["Mary", "John"]
},
{
"id": "0300",
"name": "name 3",
"message": [
"Lorem blah blah 3",
"Lorem blah blah 3.1",
"Lorem blah blah 3.2",
"Lorem blah blah 3.3",
"Lorem blah blah 3.4"
],
"CandidateName": ["Peter", "Paul"]
}
]
最佳答案
从 data2
创建 HashMap 要高效得多,因此您只需迭代该数组一次。键将是 id 的
然后在迭代 existingData
时,这是一个简单的合并
var candidatesById = data2.reduce(function(a, c){
c.relatedId.forEach(function(id){
a[id] = a[id] || [];
a[id].push(c.CandidateName);
});
return a;
},{});
existingData.forEach(function(item){
item.CandidateName = candidatesById[item.id] || [];// empty array if no match
})
关于javascript - 从一个数组中提取项目并添加到现有数组 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39709805/