Страницы

Поиск по вопросам

среда, 17 июля 2019 г.

объеденить строчки json

Имеется такой 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));

Комментариев нет:

Отправить комментарий