[英]Get unique values and their amounts from an array of objects
因此,我得到一个JSON请求,该请求发送具有两个属性的对象数组,我需要提取唯一值及其数量。
这是通过邮递员发送的JSON:
[
{"name": "First value", "amount": 2},
{"name": "Second value", "amount": 4},
{"name": "First value", "amount": 6}
]
我需要返回一个包含唯一值及其总计的JSON响应:
该对象应如下所示:
{
"First value": 8,
"Second value": 4
}
您可以使用reduce()
const arr = [ {"name": "First value", "amount": 2}, {"name": "Second value", "amount": 4}, {"name": "First value", "amount": 6} ] const res = arr.reduce((ac, {name, amount}) => { ac[name] = ac[name] || 0; ac[name] += amount; return ac; },{}) console.log(res)
首先,我们将ac
初始化为一个空对象{}
。 看线
arr.reduce((ac, {name, amount}) => {...}
^^^^^^^^^^^^^^
突出显示的部分称为对象解构。 它将获得属性name
并增加当前对象的amount
,我们将通过该对象进行迭代并将其设为独立变量。
看线
ac[name] = ac[name] || 0;
现在,此行正在检查ac
对象上是否不存在ac[name]
,那么它将是undefined
因此undefined || 0
undefined || 0
将被评估为0
。 如果具有值,则ac[name]
的值将保持先前的值。
参见第三行:
ac[name] += amount;
此行会将amount
添加到ac[name]
已有值中
最后,我们返回ac
以便它将成为ac
的下一个迭代初始值。
您也可以简单地使用Array.forEach,因为它在大多数情况下更易于理解和遵循:
let arr = [{ "name": "First value", "amount": 2 }, { "name": "Second value", "amount": 4 }, { "name": "First value", "amount": 6 } ], obj={} arr.forEach(({name, amount}) => { obj[name] = obj[name] || 0 obj[name] += amount }) console.log(obj)
这里的主要区别在于, accumulator
( obj
)是在外部而不是“内部”定义为Array.reduce
函数的参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.