我正在尝试创建一个新数组,其关键是旧数组的索引
var array = [
{"tom": "red", "part":"green", "brow_id":45},
{"tom": "red", "part":"yellow", "brow_id":1},
{"tom": "red", "part":"yellow", "brow_id":2},
{"tom": "maroon", "part":"cyan", "brow_id":45}
];
var newarray = {};
array.forEach(function(elem) {
newarray[elem.brow_id] = elem;
});
新形成的数组就像这样
45: {"tom": "red", "part":"green", "brow_id":45},
1: {"tom": "red", "part":"yellow", "brow_id":1},
2: {"tom": "red", "part":"yellow", "brow_id":2},
我希望它包含旧数组的所有id,如此
45: [{"tom": "red", "part":"green", "brow_id":45},{"tom": "maroon", "part":"yellow", "brow_id":45}]
1: {"tom": "red", "part":"yellow", "brow_id":1},
2: {"tom": "red", "part":"yellow", "brow_id":2},
怎么了?
答案 0 :(得分:1)
您可以使用函数reduce
对所需的输出进行分组和构建。
var array = [{ "tom": "red", "part": "green", "brow_id": 45 }, { "tom": "red", "part": "yellow", "brow_id": 1 }, { "tom": "red", "part": "yellow", "brow_id": 2 }, { "tom": "maroon", "part": "cyan", "brow_id": 45 }];
var result = array.reduce((a, elem) => {
if (a[elem.brow_id]) {
if (Array.isArray(a[elem.brow_id])) a[elem.brow_id].push(elem);
else a[elem.brow_id] = [elem, a[elem.brow_id]];
} else a[elem.brow_id] = elem;
return a;
}, {});
console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }

使用forEach
的方法并使用修复程序检查已添加的元素到新对象。
var array = [{ "tom": "red", "part": "green", "brow_id": 45 }, { "tom": "red", "part": "yellow", "brow_id": 1 }, { "tom": "red", "part": "yellow", "brow_id": 2 }, { "tom": "maroon", "part": "cyan", "brow_id": 45 }];
var newarray = {};
array.forEach(function(elem) {
if (newarray[elem.brow_id]) {
if (Array.isArray(newarray[elem.brow_id])) newarray[elem.brow_id].push(elem);
else newarray[elem.brow_id] = [elem, newarray[elem.brow_id]];
} else newarray[elem.brow_id] = elem;
});
console.log(newarray);

.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:1)
您可以检查是否给出了属性并分配了元素,否则检查数组,如果没有创建数组。后来推了元素。
var array = [{ tom: "red", part: "green", brow_id: 45 }, { tom: "red", part: "yellow", brow_id: 1 }, { tom: "red", part: "yellow", brow_id: 2 }, { tom: "maroon", part: "cyan", brow_id: 45 }],
object = {};
array.forEach(function(elem) {
if (!object[elem.brow_id]) {
object[elem.brow_id] = elem;
return;
}
if (!Array.isArray(object[elem.brow_id])) {
object[elem.brow_id] = [object[elem.brow_id]];
}
object[elem.brow_id].push(elem);
});
console.log(object);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 2 :(得分:0)
使用Array.forEach()
进行分组:
var array = [{"tom":"red","part":"green","brow_id":45},{"tom":"red","part":"yellow","brow_id":1},{"tom":"red","part":"yellow","brow_id":2},{"tom":"maroon","part":"cyan","brow_id":45}];
var result = {};
array.forEach(function(o) {
var key = o['brow_id'];
result[key] = key in result ? [].concat(result[key], o) : o;
});
console.log(result);