【发布时间】:2016-09-22 09:13:59
【问题描述】:
如果 ID 的前两位数字匹配,我想要实现的是在数组中将对象组合在一起。所以给定下面的对象数组,我想转换这个 ORIGINAL ARRAY:
[
{
"id": "0100",
"name": "name 1",
"message": "Lorem blah blah 1"
},
{
"id": "0101",
"name": "",
"message": "Lorem blah blah 1.1"
},
{
"id": "0200",
"name": "name 2",
"message": "Lorem blah blah 2"
},
{
"id": "0201",
"name": "",
"message": "Lorem blah blah 2.1"
},
{
"id": "0202",
"name": "",
"message": "Lorem blah blah 2.2"
},
{
"id": "0300",
"name": "name 3",
"message": "Lorem blah blah 3"
},
{
"id": "0301",
"name": "",
"message": "Lorem blah blah 3.1"
},
{
"id": "0302",
"name": "",
"message": "Lorem blah blah 3.2"
},
{
"id": "0303",
"name": "",
"message": "Lorem blah blah 3.3"
},
{
"id": "0304",
"name": "",
"message": "Lorem blah blah 3.4"
}
]
进入这个新阵列:
[
{
"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"
]
}
]
要注意的关键是,如果 ID 的前两位数字相同,则将这些对象中的消息添加在一起,如 NEW ARRAY 中所示。
正如大家所见,@Nenad Vracar 已经为上述挑战展示了一个不错的答案,但是,我还有一个涉及另一个数组的问题:
`var data2 = [{"CandidateName": "Mary", "relatedId": ["0100"]},{ "CandidateName": "John", "relatedId": ["0200"]},{ "CandidateName":"Peter", "relatedId": ["0300"]},{ "CandidateName": "Paul", "relatedId": ["0300"]}];`
我想在其中提取“candidateName”并将其作为数组添加到原始数组“result”中。
我在 data1.reduce 循环中尝试了一个 data2.forEach 循环,但它似乎挂起。
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;
}, [])
我想知道是否有更优雅、更复杂的方法不会破坏?
【问题讨论】:
-
好像是有序数组
-
如果我将这个问题作为一个新问题提出来,我如何在不失去动力的情况下扩展这个问题?我可以在这里用 cmets 提问吗?如果是的话,就这样吧?
-
我来寻求进一步的帮助。我还有另一个数组:
var data2 = [{"CandidateName": "Mary", "relatedId": ["0100"]},{ "CandidateName": "John", "relatedId": ["0200"]},{ "CandidateName":"Peter", "relatedId": ["0300"]},{ "CandidateName": "Paul", "relatedId": ["0300"]}];,我想在其中提取“candidateName”并将其作为数组添加到原始数组“result”中。我在 data1.reduce 循环中尝试了一个 data2.forEach 循环,但它似乎挂起。我想知道是否有更优雅、更复杂的方法不会破坏?
标签: javascript arrays