我有一系列按每种货币(纸币,硬币)组织的货币。一些钞票和硬币出现多次。是否有办法遍历数组以删除重复的货币类型并将货币值加在一起?
我当前的数组:
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]
答案 0 :(得分:1)
保留一张包含硬币名称以及您首次偶然发现该硬币的索引的地图。硬币的名称是关键,而索引是值。例如,原始数组中的第一个元素是一角钱,因此请在地图上输入键“ dime”,值0。
继续遍历原始数组,检查每个元素,是否已经看到该类型的硬币(如果地图中存在)。如果是,则取当前元素的数量,将其添加到该键在映射中存储的索引值中存在的元素中(因为您之前已经看到过这种类型的硬币),然后从数组。
如果没有,只需将键值添加到地图并继续。
答案 1 :(得分:1)
使用对象存储键值对。用和循环遍历数组,将值添加到键的前一个值(如果存在)。这是长形式的基本思想:
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);
答案 2 :(得分:1)
您可以简单地使用reduce
1. php artisan tinker
2. Schema::drop('your_table_name')
3. php artisan migrate