Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Как в jquery просуммировать значения массива с одинаковыми датами (https://javascript.ru/forum/jquery/83236-kak-v-jquery-prosummirovat-znacheniya-massiva-s-odinakovymi-datami.html)

Rorbi 22.10.2021 00:17

Как в 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>'
    );
}

Но это выводит каждую дату отдельно и не правильно суммирует значения у строк.

рони 22.10.2021 07:14

Цитата:

Сообщение от Rorbi
Есть массив,

можно увидеть этот массив?

ksa 22.10.2021 07:53

Цитата:

Сообщение от Rorbi
Дата, значение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

Для итогов используй объект. ;)
Ключом "строки" там будет твоя дата в строковом представлении. А значением ключа будет массив "колонок".

Rorbi 22.10.2021 09:02

Цитата:

Сообщение от ksa (Сообщение 540862)
Для итогов используй объект. ;)
Ключом "строки" там будет твоя дата в строковом представлении. А значением ключа будет массив "колонок".

А можете подсказать, как это должно выглядеть по итогу в коде?
Не очень понимаю, что должно получиться

Спасибо.

рони 22.10.2021 09:33

Цитата:

Сообщение от Rorbi
А можете подсказать, как это должно выглядеть по итогу в коде?
Не очень понимаю, что должно получиться

массив - то в коде представьте!

ksa 22.10.2021 10:16

Цитата:

Сообщение от Rorbi
А можете подсказать, как это должно выглядеть по итогу в коде?

Если взять за основу те данные и их структуру, что ты показал выше...
Как вариант
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'))

Rorbi 22.10.2021 10:32

Цитата:

Сообщение от рони (Сообщение 540864)
массив - то в коде представьте!

Массив:

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"}

ksa 22.10.2021 10:43

Цитата:

Сообщение от Rorbi
По итогу массив получается если в консоль вывести

По факту это не массив...
Это объект из объектов.

Некоторые ключи вообще пустая строка
0: ""

Rorbi 22.10.2021 15:29

Цитата:

Сообщение от ksa (Сообщение 540867)
По факту это не массив...
Это объект из объектов.

Некоторые ключи вообще пустая строка
0: ""

А из-за этого меняется что то в реализации перебора и суммирования значений по дате?

Rorbi 22.10.2021 19:36

Цитата:

Сообщение от ksa (Сообщение 540867)
По факту это не массив...
Это объект из объектов.

Некоторые ключи вообще пустая строка
0: ""


Попробовал применить ваш способ, не получилось. Похоже что из разного вида массива/объекта из объектов


Часовой пояс GMT +3, время: 08:19.