Javascript 如何使用Array.reduce()?

Javascript 如何使用Array.reduce()?,javascript,arrays,Javascript,Arrays,我有一个JSON响应,如下所示: [ {"name": "a", "data": [{"value":10,"id":1},{"value":20,"id":2}], {"name": "b", "data": [{"value":10,"id":1},{"value":20,"id":2}], {"name": "c", "data": [{"value":10,"id":1},{"value":20,"id":2}], {"name": "d", "data": [{"value":10,"

我有一个JSON响应,如下所示:

[
{"name": "a", "data": [{"value":10,"id":1},{"value":20,"id":2}],
{"name": "b", "data": [{"value":10,"id":1},{"value":20,"id":2}],
{"name": "c", "data": [{"value":10,"id":1},{"value":20,"id":2}],
{"name": "d", "data": [{"value":10,"id":1},{"value":20,"id":2}],
{"name": "e", "data": [{"value":10,"id":1},{"value":20,"id":2}],
]
如何对每个数据元素内的每个“值”求和(按列),并得到如下结果:

[{"name": "something", "data":[{"value":50,"id":1},{"value":100,"id":2}]
如何使用array.reduce()进行此操作,或者是否有其他方法可以实现上述结果?

请尝试此代码

<script>
 var numbers = [
{"name": "a", "data": [{"value":10,"id":1},{"value":20,"id":2}]},
{"name": "b", "data": [{"value":10,"id":1},{"value":20,"id":2}]},
{"name": "c", "data": [{"value":10,"id":1},{"value":20,"id":2}]},
{"name": "d", "data": [{"value":10,"id":1},{"value":20,"id":2}]},
{"name": "e", "data": [{"value":10,"id":1},{"value":20,"id":2}]},
];

function getSum(total, val) {
  total.data[0].value = total.data[0].value + val.data[0].value;
  total.data[1].value = total.data[1].value + val.data[1].value;
  return total;
 }
function myFunction(item) {
   document.getElementById("demo").innerHTML = 
  JSON.stringify(numbers.reduce(getSum));
}
代码只是在每次迭代中添加值并更新现有值。

试试这段代码

<script>
 var numbers = [
{"name": "a", "data": [{"value":10,"id":1},{"value":20,"id":2}]},
{"name": "b", "data": [{"value":10,"id":1},{"value":20,"id":2}]},
{"name": "c", "data": [{"value":10,"id":1},{"value":20,"id":2}]},
{"name": "d", "data": [{"value":10,"id":1},{"value":20,"id":2}]},
{"name": "e", "data": [{"value":10,"id":1},{"value":20,"id":2}]},
];

function getSum(total, val) {
  total.data[0].value = total.data[0].value + val.data[0].value;
  total.data[1].value = total.data[1].value + val.data[1].value;
  return total;
 }
function myFunction(item) {
   document.getElementById("demo").innerHTML = 
  JSON.stringify(numbers.reduce(getSum));
}

代码只是在每次迭代中添加值并更新现有值。

您可以将一个对象作为
id
的哈希表,并对值求和

var数组=[{name:a],数据:[{value:10,id:1},{value:20,id:2}]},{name:b],数据:[{{value:10,id:1},{value:20,id:2}]},{name:c],数据:[{value:10,id:1},{value:20,id:2}},{name:d],数据:[{value:10,id:1},{value:20,id:2},{name:2},id:1},{ }],
结果={name:'something',数据:Object.values(array.reduce((r,{data})=>{
data.forEach(({value,id})=>{
r[id]=r[id]|{value:0,id};
r[id]。值+=值;
});
返回r;
},Object.create(null)))};
控制台日志(结果)

。作为控制台包装{max height:100%!important;top:0;}
您可以将一个对象作为
id
的哈希表,并对值求和

var数组=[{name:a],数据:[{value:10,id:1},{value:20,id:2}]},{name:b],数据:[{{value:10,id:1},{value:20,id:2}]},{name:c],数据:[{value:10,id:1},{value:20,id:2}},{name:d],数据:[{value:10,id:1},{value:20,id:2},{name:2},id:1},{ }],
结果={name:'something',数据:Object.values(array.reduce((r,{data})=>{
data.forEach(({value,id})=>{
r[id]=r[id]|{value:0,id};
r[id]。值+=值;
});
返回r;
},Object.create(null)))};
控制台日志(结果)
.as控制台包装{最大高度:100%!重要;顶部:0;}
使用和

var arr=[{“name”:“a”,“data”:[{“value”:10,“id”:1},{“value”:20,“id”:2}]},{“name”:“b”,“data”:[{“value”:10,“id”:1},{“value”:20,“id”:2}},{“name”:“c”,“data”:[{“value”:10,“id”:1},{“value”:20,“id”:2},{“name”:“d”,“data”:“data”:“{“value”:10,“id”:1,{“value”:20,“id”:2},{“value”:“id”:1},{“value”:“id”:20},{“value”:“id”:2},{“value”:“id”:1},{;
var结果={
“名字”:“某物”,
“数据”:arr.reduce((a,c)=>{//reduces/merge 2条arr记录
a、 data.map((v,i)=>{//为2条记录添加值(按列)
v、 value=v.value+c.data[i].值;
返回v;
});
返回a;
})
};
控制台日志(结果)使用和

var arr=[{“name”:“a”,“data”:[{“value”:10,“id”:1},{“value”:20,“id”:2}]},{“name”:“b”,“data”:[{“value”:10,“id”:1},{“value”:20,“id”:2}},{“name”:“c”,“data”:[{“value”:10,“id”:1},{“value”:20,“id”:2},{“name”:“d”,“data”:“data”:“{“value”:10,“id”:1,{“value”:20,“id”:2},{“value”:“id”:1},{“value”:“id”:20},{“value”:“id”:2},{“value”:“id”:1},{;
var结果={
“名字”:“某物”,
“数据”:arr.reduce((a,c)=>{//reduces/merge 2条arr记录
a、 data.map((v,i)=>{//为2条记录添加值(按列)
v、 value=v.value+c.data[i].值;
返回v;
});
返回a;
})
};

控制台日志(结果)尝试以下逻辑

var series = [{"name": "a", "data": [{"value":10,"id":1},{"value":20,"id":2}]}, ... , ....]

var resultSeries = series.reduce((acc, cur) => {
    var result = {
        name: ‘Something’,
        data: []
    };
    var dataArray = acc.data.map((el, i) => {
        var curData = cur.data[i] || {};
        var sum = (el.value || 0) + (curData.value || 0);
        return {
            value: sum
        }
    });
    result.data = dataArray ;
    return result;
})
现在,
resultSeries
将保持不变

[{"name": "something", "data":[{"value":50,"id":1},{"value":100,"id":2}]

尝试以下逻辑

var series = [{"name": "a", "data": [{"value":10,"id":1},{"value":20,"id":2}]}, ... , ....]

var resultSeries = series.reduce((acc, cur) => {
    var result = {
        name: ‘Something’,
        data: []
    };
    var dataArray = acc.data.map((el, i) => {
        var curData = cur.data[i] || {};
        var sum = (el.value || 0) + (curData.value || 0);
        return {
            value: sum
        }
    });
    result.data = dataArray ;
    return result;
})
现在,
resultSeries
将保持不变

[{"name": "something", "data":[{"value":50,"id":1},{"value":100,"id":2}]

我相信您的JSON数据与我在下面的代码片段中使用的数据类似。您可以这样做:

a=[
{“name”:“a”,“data”:[{“value”:10,“id”:1},{“value”:20,“id”:2}]},
{“name”:“b”,“data”:[{“value”:10,“id”:1},{“value”:20,“id”:2}]},
{“name”:“c”,“data”:[{“value”:10,“id”:1},{“value”:20,“id”:2}]},
{“name”:“d”,“data”:[{“value”:10,“id”:1},{“value”:20,“id”:2}]},
{“name”:“e”,“data”:[{“value”:10,“id”:1},{“value”:20,“id”:2}]},
]
让减速机=(累加器,电流值)=>{
acculator.name=“某物”;
for(设i=0;iconsole.log(a.reduce(reducer))我相信您的JSON数据与我在下面的代码片段中使用的数据类似。您可以这样做:

a=[
{“name”:“a”,“data”:[{“value”:10,“id”:1},{“value”:20,“id”:2}]},
{“name”:“b”,“data”:[{“value”:10,“id”:1},{“value”:20,“id”:2}]},
{“name”:“c”,“data”:[{“value”:10,“id”:1},{“value”:20,“id”:2}]},
{“name”:“d”,“data”:[{“value”:10,“id”:1},{“value”:20,“id”:2}]},
{“name”:“e”,“data”:[{“value”:10,“id”:1},{“value”:20,“id”:2}]},
]
让减速机=(累加器,电流值)=>{
acculator.name=“某物”;
for(设i=0;iconsole.log(a.reduce(reducer))
您的JSON无效。
数据
是否在同一索引上始终具有相同的
id
?您的规范不清楚。我们可以理解如何按id减少值,但您给出的建议结果不清楚“name”键。。。您想减少名称吗?您想要的最终结果是基于其id的一些值??因此,您应该查找
[{“value”:50,“id”:1},{“value”:100,“id”:2}]
而不是名称。您的JSON无效。
数据是否在同一索引上始终具有相同的
id
?您的规范不清楚。我们可以理解如何按id减少值,但您给出的建议结果不清楚“name”键。。。你想减价吗