Как в массиве с объектами записать в подмассивы объекты, в которых совпадают значения свойств?
Есть такой массив объектов:
[
{"ind": 1, "nes": 0},
{"ind": 2, "nes": 1},
{"ind": 3, "nes": 1},
{"ind": 4, "nes": 1},
{"ind": 5, "nes": 1},
{"ind": 6, "nes": 2},
{"ind": 7, "nes": 2},
{"ind": 8, "nes": 2},
{"ind": 9, "nes": 3},
{"ind": 10, "nes": 3},
{"ind": 11, "nes": 4},
{"ind": 12, "nes": 4},
{"ind": 13, "nes": 4}
]
Как собрать в подмассивы все объекты с одинаковым nes, чтобы получилось так:
[
{"ind": 1, "nes": 0},
[
{"ind": 2, "nes": 1},
{"ind": 3, "nes": 1},
{"ind": 4, "nes": 1}
],
{"ind": 5, "nes": 1},
[
{"ind": 6, "nes": 2},
{"ind": 7, "nes": 2},
{"ind": 8, "nes": 2}
],
{"ind": 9, "nes": 3},
[
{"ind": 10, "nes": 4},
{"ind": 11, "nes": 4},
{"ind": 12, "nes": 4},
{"ind": 13, "nes": 4}
],
]
Если св-во nes в объекте нет, или нет его повторений, позиция объекта не меняется. Желательно понятный способ, который будет работать в самом последнем ie, но это не обязательно.
Ответы (1 шт):
Автор решения: andreycrane
→ Ссылка
Вы можете сделать это как я показал в примере
var arr = [
{"ind": 1, "nes": 0},
{"ind": 2, "nes": 1},
{"ind": 3, "nes": 1},
{"ind": 4, "nes": 1},
{"ind": 5, "nes": 1},
{"ind": 6, "nes": 2},
{"ind": 7, "nes": 2},
{"ind": 8, "nes": 2},
{"ind": 9, "nes": 3},
{"ind": 10, "nes": 3},
{"ind": 11, "nes": 4},
{"ind": 12, "nes": 4},
{"ind": 13, "nes": 4}
];
var groups = {};
for(let i = 0; i < arr.length; i++) {
var item = arr[i];
if(!groups[item.nes]) {
groups[item.nes] = [];
}
groups[item.nes].push(item);
}
var res = [];
for(var group in groups) {
if(!groups.hasOwnProperty(group)) {
continue;
}
if(groups[group].length === 1) {
res.push(groups[group][0]);
} else {
res.push(groups[group]);
}
}
console.log(res);