Во-первых, в JavaScript, как правило, не рекомендуется перебирать массивы с использованием for ... in
. См. Why is using "for...in" with array iteration a bad idea?.
Таким образом, вы можете попробовать что-то вроде этого:
var groups = {};
for (var i = 0; i < myArray.length; i++) {
var groupName = myArray[i].group;
if (!groups[groupName]) {
groups[groupName] = [];
}
groups[groupName].push(myArray[i].color);
}
myArray = [];
for (var groupName in groups) {
myArray.push({group: groupName, color: groups[groupName]});
}
Используя промежуточный groups
объект здесь помогает ускорить процесс, потому что это позволяет избежать вложенности циклов поиска с помощью массивов. Кроме того, потому что groups
является объектом (а не массивом), итерацией по нему с использованием for ... in
.
Добавление
FWIW, если вы хотите, чтобы избежать дублирования записей цвета в результате массивов можно добавить if
заявление выше линии groups[groupName].push(myArray[i].color);
для защиты от дублей. Используя jQuery, это будет выглядеть так:
if (!$.inArray(myArray[i].color, groups[groupName])) {
groups[groupName].push(myArray[i].color);
}
Без JQuery вы можете добавить функцию, которая делает то же самое, как inArray
JQuery в:
Array.prototype.contains = function(value) {
for (var i = 0; i < this.length; i++) {
if (this[i] === value)
return true;
}
return false;
}
, а затем использовать его как это:
if (!groups[groupName].contains(myArray[i].color)) {
groups[groupName].push(myArray[i].color);
}
Обратите внимание, что в любом в случае, если вы собираетесь немного замедлить работу из-за всей дополнительной итерации, поэтому, если вам не нужно избегать дублирования цветовых записей в массивах результатов, я бы рекомендовал избегать этого дополнительного сотрудничества де. Там
Вы пробовали что-нибудь еще? На SO уже много тесно связанных вопросов. См. [This] (http://stackoverflow.com/questions/30893667/group-by-json-array-using-jquery), [это] (http://stackoverflow.com/questions/12873228/javascript-group- by-array) и [this] (http://stackoverflow.com/questions/25676026/group-array-with-sub-array). –
Там много синтаксических ошибок. Пожалуйста, проверьте свой код перед публикацией. – 1983