Javascript 如何使用Array.reduce()?
我有一个JSON响应,如下所示: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,"
[
{"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;i console.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;i console.log(a.reduce(reducer))
您的JSON无效。数据
是否在同一索引上始终具有相同的id
?您的规范不清楚。我们可以理解如何按id减少值,但您给出的建议结果不清楚“name”键。。。您想减少名称吗?您想要的最终结果是基于其id的一些值??因此,您应该查找[{“value”:50,“id”:1},{“value”:100,“id”:2}]
而不是名称。您的JSON无效。数据是否在同一索引上始终具有相同的id
?您的规范不清楚。我们可以理解如何按id减少值,但您给出的建议结果不清楚“name”键。。。你想减价吗