javascript - 将具有相同键的数组元素加在一起?
问题描述
我有一系列按每种货币(钞票,硬币)组织的钱。一些纸币和硬币出现多次。有没有办法通过数组删除重复的货币类型并将货币值加在一起?
我当前的数组:
register.change = [[TEN,10],[QUARTER,0.25],[QUARTER,0.25],[QUARTER,0.25],[DIME,0.1],[DIME,0.1],[PENNY,0.01],[PENNY,0.01],[PENNY,0.01],[PENNY,0.01]]
最终结果:
register.change = [[TEN,10],[QUARTER,0.75],[DIME,0.2],[PENNY,0.04]
解决方案
使用对象来存储键值对。循环遍历数组,并为每一对,将值添加到键的前一个值(如果存在)。这是长篇的基本思想:
var obj = {};
for (var i = 0; i < change.length; i++) {
if (change[i][0] in obj) {
obj[change[i][0]] += change[i][1];
} else {
obj[change[i][0]] = change[i][1];
}
}
这可以使用reduce
(并使用 ES6 语法)大大简化:
var obj = change.reduce((acc, [key, val]) => (acc[key] = (acc[key] || 0) + val, acc), {});
然后只需将该结果传递给以Object.entries
将其转回键值对数组。
把它放在一起:
const TEN = 'TEN';
const QUARTER = 'QUARTER';
const DIME = 'DIME';
const PENNY = 'PENNY';
const change = [[TEN,10],[QUARTER,0.25],[QUARTER,0.25],[QUARTER,0.25],[DIME,0.1],[DIME,0.1],[PENNY,0.01],[PENNY,0.01],[PENNY,0.01],[PENNY,0.01]];
const output = Object.entries(change.reduce((a, [k, v]) => (a[k] = (a[k] || 0) + v, a), {}));
console.log(output);
推荐阅读
- reactjs - 如何将对象数组传递给Typescript中的类
- android - Ionic Angular Capacitor Android NodeJS - API连接失败
- python - 在 Python 中向量化函数
- c# - 在 AutoMapper 中,如何从抽象基类项目到接口
- javascript - Angular URL 数据生成
- c# - 将字典值按降序排序
- javascript - 有没有办法确定 chrome 选项卡是否正在通过 api 录制音频/视频
- node.js - POST 请求返回 index.html 正文而不是适当的响应
- html - CSS如何根据高度缩放和纵横比宽度?
- python-3.x - Discord.py 加入/留言