javascript - 当涉及键值对时,您可以使用 Javascript Array Map 或 Reduce 吗?
问题描述
取一个这样的数字数组并用每个数字创建一个新数组,前面的数字之和可以这样完成:
let numbers = [1, 2, 3, 4]
let total = 0
numbers.map(v => total += v)
// result
// [1, 3, 6, 10]
如果数组包含具有键/值对的对象,是否有办法使用相同的方法,还是我必须使用不同的方法?
var numbers = [{ val1: 1, val2: 2, val3: 3, val4: 4 }]
结果将是与值相加的相同键。
var numbers = [{ val1: 1, val2: 3, val3: 6, val4: 10 }]
编辑:所有这些答案都在小提琴中起作用,但在我的代码中唯一起作用的是
numbers.map(o => Object.assign(...Object.entries(o).map((s => ([k, v]) => ({ [k]: s += v}))(0))));
解决方案
用 迭代数组Array.map()
。用于Object.entries()
从对象中获取键/值对,使用 迭代对,并使用as 值Array.reduce()
重建对象。total
注意:迭代顺序可能会根据ES6 中对象属性的遍历顺序而改变。
const numbers = [{ val1: 1, val2: 2, val3: 3, val4: 4 }]
let total = 0
const result = numbers.map(n => Object.entries(n)
.reduce((r, [k, v]) => {
total += v;
r[k] = total;
return r;
}, {}));
console.log(result);
推荐阅读
- jquery - jQuery Timepicker“changeTime”不起作用
- django - 将 request.get 和 request.post 数据转换为字典
- python - 如何创建自己的方法并在 DataFrame 中使用它?
- python - 如果不存在,如何在文件中插入行?
- salesforce - 如何在 Salesforce soql 中收集所有静音提要项目列表
- c++ - 为什么 c++ 中没有整数的 std::copysign 特化?
- ios - UICollectionViewCell cellSize 不适用于最后一项
- android - 使用LinearLayout在一行(水平)android studio中设置三个按钮
- azure-functions - Azure Functions 运行时无法启动 - Microsoft.Extensions.DependencyInjection
- javascript - 从 DOM 获取值并将其添加到按钮值