Учитывая массив как
[
{name: 'John', span: 1},
{name: 'John', span: 1},
{name: 'Peter', span: 1},
{name: 'John', span: 1},
{name: 'Peter', span: 1},
{name: 'Peter', span: 1},
{name: 'Peter', span: 1}
]
Я хотел бы объединить его таким образом, чтобы, если они повторяются, мы объединяли и суммировали свойство span
.Таким образом, ожидаемый результат составляет
[
{name: 'John', span: 2},
{name: 'Peter', span: 1},
{name: 'John', span: 1},
{name: 'Peter', span: 3}
]
Кто-нибудь может предложить подходящий способ сделать это?Лучшее, что я мог придумать, было
var data = [
{name: 'John', span: 1},
{name: 'John', span: 1},
{name: 'Peter', span: 1},
{name: 'John', span: 1},
{name: 'Peter', span: 1},
{name: 'Peter', span: 1},
{name: 'Peter', span: 1}
];
var result = [];
var count = 0;
while (count <= data.length) {
var datum = data[count];
var isFound = false;
do {
var nextCount = data[++count];
if (!nextCount) {
break;
}
if (nextCount.name === datum.name) {
datum.span += 1;
isFound = true;
} else {
isFound = false;
}
} while(isFound);
result.push(datum);
}
console.log(result);
. Это работает, за исключением undefined
, который находится в конце (не знаю почему).Кто-нибудь может предложить более эффективный и читабельный способ сделать это?