Как в 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, время: 16:14. |