Как в jquery просуммировать значения массива с одинаковыми датами
Прошу помочь с получением данных из массива.
Есть массив, к примеру: Дата, значение1, значение2, Значение3, Значение4 2021-10-21, 1, 1, 1, 1 2021-10-21, 1, 1, 1, 1 2021-10-22, 1, 1, 1, 1 2021-10-22, 1, 1, 1, 1 2021-10-23, 1, 1, 1, 1 Я хочу пройтись циклом по этому массиву выбрать все значения с одинаковыми датами и просуммировать их и вывести полученный результат в HTML. По итогу должно получиться 2021-10-21, 2, 2, 2, 2 2021-10-22, 2, 2, 2, 2 2021-10-23, 1, 1, 1, 1 Сейчас я получаю сумму всех значений из БД кодом: $.each(массив, function(index,value) { for (var i = 0; i < value["active"].length; i++) { var Дата = value["Дата"]; var Значение1 += value["Значение1"]; var Значение2 += value["Значение2"]; var Значение3 += value["Значение3"]; var Значение4 += value["Значение3"]; } $(".text").append( '<td>'+Дата+'</td>'+ '<td>'+Значение1+'</td>'+ '<td>'+Значение2+'</td>'+ '<td>'+Значение3+'</td>'+ '<td>'+Значение4+'</td>' ); } Но это выводит каждую дату отдельно и не правильно суммирует значения у строк. |
Цитата:
|
Цитата:
Ключом "строки" там будет твоя дата в строковом представлении. А значением ключа будет массив "колонок". |
Цитата:
Не очень понимаю, что должно получиться Спасибо. |
Цитата:
|
Цитата:
Как вариант const a = [ ['2021-10-21', 1, 1, 1, 1], ['2021-10-21', 1, 1, 1, 1], ['2021-10-22', 1, 1, 1, 1], ['2021-10-22', 1, 1, 1, 1], ['2021-10-23', 1, 1, 1, 1] ] const rs ={} a.forEach(el => { const dt = el[0] if (rs[dt]) { rs[dt] = rs[dt].map((e, i) => e + el[i + 1]) } else { rs[dt] = el.slice(1) } }) const tt = [] for (el in rs) { const txt = el + ', ' + rs[el].toString() tt.push(txt) } alert(tt.join('\n')) |
Цитата:
var массив = JSON.parse(data) //По итогу массив получается если в консоль вывести: 0: "" 1: {id: "1", id2: "1", date: "2021-10-18", значение1: "1", "значение2": "1", "значение3": "1", "значение4": "1"} 2: {id: "2", id2: "1", date: "2021-10-18", значение1: "1", "значение2": "1", "значение3": "1", "значение4": "1"} 3: {id: "3", id2: "1", date: "2021-10-19", значение1: "1", "значение2": "1", "значение3": "1", "значение4": "1"} |
Цитата:
Это объект из объектов. Некоторые ключи вообще пустая строка 0: "" |
Цитата:
|
Цитата:
Попробовал применить ваш способ, не получилось. Похоже что из разного вида массива/объекта из объектов |
Цитата:
|
Всё получилось, помог: Алексей Обухов с stackoverflow
Скопировал код сюда, вдруг кому пригодится в будущем var data = `{ "0": "", "1": {"id": "1", "id2": "1", "date": "2021-10-18", "значение1": "1", "значение2": "1", "значение3": "1", "значение4": "1"}, "2": {"id": "2", "id2": "1", "date": "2021-10-18", "значение1": "1", "значение2": "1", "значение3": "1", "значение4": "1"}, "3": {"id": "3", "id2": "1", "date": "2021-10-19", "значение1": "1", "значение2": "1", "значение3": "1", "значение4": "1"} }`; var массив = JSON.parse(data); var ht = {}; $.each(массив, function(index,value) { var Дата = value["date"]; if (!Дата) return; var Значение1 = parseInt(value["значение1"], 10); var Значение2 = parseInt(value["значение2"], 10); var Значение3 = parseInt(value["значение3"], 10); var Значение4 = parseInt(value["значение4"], 10); //for (var i = 0; i < value["active"].length; i++) { if (ht[Дата]) { ht[Дата]["Значение1"] += Значение1; ht[Дата]["Значение2"] += Значение2; ht[Дата]["Значение3"] += Значение3; ht[Дата]["Значение4"] += Значение4; } else { ht[Дата] = { "Значение1": Значение1, "Значение2": Значение2, "Значение3": Значение3, "Значение4": Значение4, } } }); for (var i in ht) { $(".text").append('<tr>' + '<td>'+i+'</td>'+ '<td>'+ht[i]["Значение1"]+'</td>'+ '<td>'+ht[i]["Значение2"]+'</td>'+ '<td>'+ht[i]["Значение3"]+'</td>'+ '<td>'+ht[i]["Значение4"]+'</td>'+ '</tr>'); } |
Rorbi,
то есть на stackoverflow данные надо представить, а здесь исключительно телепаты. ))) |
Цитата:
Перебор объектов немного отличается от перебора ключей объекта... У набора ключей в объекте нет длины... |
рони, наверняка он и там ничего не предоставил... Просто тамошние ребята "включили больше интуиции". :D
|
Часовой пояс GMT +3, время: 02:11. |