Сумма объектов из JSON и создание нового JSON

Всем привет! У меня есть код, считающий сумму значений "price" из всех объектов JSON:

var json = '[{"id":0,"price":"100"},{"id":1,"price":"50.95"}]';

var data = JSON.parse(json);

function calc (arr) {
    var sum = 0;
    arr.forEach(function (item) {
        var n = +item.price;
        sum += n;
    });
    
    return sum;
}

var sum = calc(data);
console.log(sum);

У меня есть JSON:

[
   {
      "{#SNMPINDEX}":"1",
      "{#BSNDOT11ESSNUMBEROFMOBILESTATIONS}":"3"
   },
   {
      "{#SNMPINDEX}":"2",
      "{#BSNDOT11ESSNUMBEROFMOBILESTATIONS}":"2"
   },
   {
      "{#SNMPINDEX}":"3",
      "{#BSNDOT11ESSNUMBEROFMOBILESTATIONS}":"3"
   },
   {
      "{#SNMPINDEX}":"4",
      "{#BSNDOT11ESSNUMBEROFMOBILESTATIONS}":"2"
   }
]

Мне нужно модернизировать код, чтобы он мог считать сумму всех {#BSNDOT11ESSNUMBEROFMOBILESTATIONS} и на выходе создавать JSON с одним объектом, вот пример:

[
   {
      "{#SNMPINDEX}":"1",
      "{#BSNDOT11ESSNUMBEROFMOBILESTATIONS}":"10"
   }
]

{#SNMPINDEX} всегда должен быть 1, а в {#BSNDOT11ESSNUMBEROFMOBILESTATIONS} сумма из предыдущего JSON. Заранее спасибо!


Ответы (2 шт):

Автор решения: Aziz Umarov

Такой ответ удовлетворяет условию задачи.

var data = [
   {
  "{#SNMPINDEX}":"1",
  "{#BSNDOT11ESSNUMBEROFMOBILESTATIONS}":"3"
   },
   {
  "{#SNMPINDEX}":"2",
  "{#BSNDOT11ESSNUMBEROFMOBILESTATIONS}":"2"
   },
   {
  "{#SNMPINDEX}":"3",
  "{#BSNDOT11ESSNUMBEROFMOBILESTATIONS}":"3"
   },
   {
  "{#SNMPINDEX}":"4",
  "{#BSNDOT11ESSNUMBEROFMOBILESTATIONS}":"2"
   }
];

var result = data.reduce((acc, item)=> {acc[0]["{#BSNDOT11ESSNUMBEROFMOBILESTATIONS}"] =""+(+(acc[0]["{#BSNDOT11ESSNUMBEROFMOBILESTATIONS}"]) + (+(item["{#BSNDOT11ESSNUMBEROFMOBILESTATIONS}"]))); return acc}, [{
    "{#SNMPINDEX}":"1",
    "{#BSNDOT11ESSNUMBEROFMOBILESTATIONS}":"0"
   }]);


console.log(result);

Upd проверял на https://jsfiddle.net/

введите сюда описание изображения

Спасибо @Grundy добавил скобок не думал что это так критично.

→ Ссылка
Автор решения: Anton
let json = `
[
    {
       "{#SNMPINDEX}":"1",
       "{#BSNDOT11ESSNUMBEROFMOBILESTATIONS}":"3"
    },
    {
       "{#SNMPINDEX}":"2",
       "{#BSNDOT11ESSNUMBEROFMOBILESTATIONS}":"2"
    },
    {
       "{#SNMPINDEX}":"3",
       "{#BSNDOT11ESSNUMBEROFMOBILESTATIONS}":"3"
    },
    {
       "{#SNMPINDEX}":"4",
       "{#BSNDOT11ESSNUMBEROFMOBILESTATIONS}":"2"
    }
 ]
`;

let data = JSON.parse(json);

function calc (arr, valName) {
    let sum = 0;
    return arr.reduce( (accumulator, currentValue) => {
        return accumulator + Number(currentValue[valName]);
    }, sum);
    
}

function makeJsonResult(data) {
    let sum = calc(data, "{#BSNDOT11ESSNUMBEROFMOBILESTATIONS}");
    return {
            "{#SNMPINDEX}":"1",
            "{#BSNDOT11ESSNUMBEROFMOBILESTATIONS}":sum
    }
}

console.log(makeJsonResult(data));
→ Ссылка