Сумма объектов из 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));
