Имеется такой json:
{art: "1", quan: "1", sum: "1"}
{art: "2", quan: "1", sum: "1"}
{art: "1", quan: "1", sum: "1"}
{art: "12", quan: "1", sum: "1"}
{art: "1", quan: "1", sum: "1"}
{art: "12", quan: "1", sum: "1"}
{art: "1", quan: "1", sum: "1"}
{art: "11", quan: "1", sum: "1"}
{art: "1", quan: "1", sum: "1"}
Подскажите, как мне найти повторы по полю 'art', удалить повторы и сложить поля quan и sum.
То есть в итоге должно получиться :
{art: "1", quan: "4", sum: "4"}
{art: "2", quan: "1", sum: "1"}
{art: "12", quan: "2", sum: "2"}
{art: "11", quan: "1", sum: "1"}
Код:
function filterArt(arr) {
for (var i = 0; i < arr.length; i++) {
for (var j = i + 1; j < arr.length - i; j++) {
if (arr[i].art == arr[j].art){
arr[i].quan = +arr[i].quan + (+arr[j].quan);
arr[i].sum = +arr[i].sum + (+arr[j].sum);
arr.splice(j,1);
}
}
}
}
Код не совершенен. Подскажите, пожалуйста, в какую сторону копать.
Ответ
Вы ошиблись когда сделали во втором цикле j < arr.length - i:
Тогда в определенных случаях, ваш i элемент не сравнится с последними элементами массива.
var arr = [
{art: "1", quan: "1", sum: "1"},
{art: "2", quan: "1", sum: "1"},
{art: "1", quan: "1", sum: "1"},
{art: "12", quan: "1", sum: "1"},
{art: "1", quan: "1", sum: "1"},
{art: "12", quan: "1", sum: "1"},
{art: "1", quan: "1", sum: "1"},
{art: "11", quan: "1", sum: "1"},
{art: "1", quan: "1", sum: "1"}
];
function filterArt(arr) {
for (var i = 0; i < arr.length; i++) {
for (var j = i + 1; j < arr.length; j++) {
if (arr[i].art == arr[j].art) {
arr[i].quan = +arr[i].quan + (+arr[j].quan);
arr[i].sum = +arr[i].sum + (+arr[j].sum);
arr.splice(j, 1);
}
}
}
return arr;
}
console.log(filterArt(arr));
Комментариев нет:
Отправить комментарий