@developerrr

Как складывать и выводить данные на страницу с одинаковым свойством?

Есть данные в формате:
[{'id':1, 'amount':123, 'currency' : 'CHF'},{'id':2, 'amount':321, 'currency' : 'USD'},{'id':3, 'amount':4324, 'currency' : 'UAH'},{'id':4, 'amount':45645, 'currency' : 'USD'},{'id':5, 'amount':8972, 'currency' : 'CHF'}]

Мне нужно вывести данные эти данные на страницу (без id конечно же), но нужно не так:
123 CHF
321 USD
4324 UAH
45645 USD
8972 CHF

а так вывести (то есть не дублировать одинаковую валюту, а складывать и выводить общую сумму):
9095 CHF
45966 USD
4324 UAH


Подскажите, пожалуйста, как правильно сделать.
  • Вопрос задан
  • 131 просмотр
Решения вопроса 2
var arr = [{'id':1, 'amount':123, 'currency' : 'CHF'},{'id':2, 'amount':321, 'currency' : 'USD'},{'id':3, 'amount':4324, 'currency' : 'UAH'},{'id':4, 'amount':45645, 'currency' : 'USD'},{'id':5, 'amount':8972, 'currency' : 'CHF'}];
var result = {};
arr.forEach(function(item){
  if(!result.hasOwnProperty(item.currency))
    result[item.currency] = 0;
  result[item.currency] += item.amount;

});

console.log(result)
//Object {CHF: 9095, USD: 45966, UAH: 4324}
Ответ написан
Комментировать
REZ1DENT3
@REZ1DENT3
web-developer
var data = [{'id': 1, 'amount': 123, 'currency': 'CHF'}, {'id': 2, 'amount': 321, 'currency': 'USD'}, {
    'id': 3,
    'amount': 4324,
    'currency': 'UAH'
}, {'id': 4, 'amount': 45645, 'currency': 'USD'}, {'id': 5, 'amount': 8972, 'currency': 'CHF'}];

var newData = [];
for (i = 0; i < data.length; ++i) {
    if (typeof newData[data[i]['currency']] == 'undefined')
        newData[data[i]['currency']] = 0;
    newData[data[i]['currency']] += data[i]['amount'];
}

for (var key in newData) {
    console.log(key + ' ' + newData[key]);
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Goodilla
@Goodilla
Разработчик/архитектор веб приложений
Думаю, надо сортировать по свойствам. Создаём массив, к примеру, ассоциативный. Потом, приступаем к JSON. Для начала, если это не объект, формируем объект, потом циклом each прогоняем по всем элементам.

Берём первый, по "currency" сравниваем, есть ли он не в массиве, то добавляем (в зависимости от того, какой массив был выбран, добавляем либо только "currency" и к нему "amount", либо объектом). Если уже есть похожий в массиве, то прибавляем к существующему.

Пример:

var jsonObj = $.parseJSON('[{"id":1, "amount":123, "currency" : "CHF"},{"id":2, "amount":321, "currency" : "USD"},{"id":3, "amount":4324, "currency" : "UAH"},{"id":4, "amount":45645, "currency" : "USD"},{"id":5, "amount":8972, "currency" : "CHF"}]');
var data = {};

	$.each(jsonObj, function(index, value){
		if(!data.hasOwnProperty(value.currency)){
			data[value.currency] = value.amount;
		}else{
			data[value.currency] = data[value.currency] + parseInt(value.amount);
		}
	});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект