需要通过消除类似的值来执行对象数组中元素的总和



下面的输入数组是示例数组

var array = [
{key:'pos',value:5,section:"one"},
{key:'pos',value:5,section:"Two"},
{key:'pos',value:5,section:"three"},
{key:'pos',value:5,section:"four"},
{key:'pos',value:5,section:"five"},
{key:'online',value:5,section:"one"},
{key:'online',value:5,section:"Two"},
{key:'online',value:5,section:"three"},
{key:'online',value:5,section:"four"},
{key:'online',value:5,section:"five"},
{key:'call',value:5,section:"one"},
{key:'call',value:5,section:"Two"},
{key:'call',value:5,section:"three"},
{key:'call',value:5,section:"four"},
{key:'call',value:5,section:"five"},
]

我已经尝试了以下代码的价值总和

const sumOfValue = array.map(item=>item.value).reduce((prev, next) => prev + next);

我如何根据关键字筛选/删除类似的值我正在寻找如下所示的输出输出应该是基于键的unqiue值的总和输出:15

您需要首先取出唯一的键,然后通过map进行迭代,并通过reduce进行累积。

var array = [
{key:'pos',value:5,section:"one"},
{key:'pos',value:5,section:"Two"},
{key:'pos',value:5,section:"three"},
{key:'pos',value:5,section:"four"},
{key:'pos',value:5,section:"five"},
{key:'online',value:5,section:"one"},
{key:'online',value:5,section:"Two"},
{key:'online',value:5,section:"three"},
{key:'online',value:5,section:"four"},
{key:'online',value:5,section:"five"},
{key:'call',value:5,section:"one"},
{key:'call',value:5,section:"Two"},
{key:'call',value:5,section:"three"},
{key:'call',value:5,section:"four"},
{key:'call',value:5,section:"five"},
]
const sumOfValue = Object.values(
array.reduce( (c, e) => {
if (!c[e.key]) c[e.key] = e;
return c;
}, {})
).map((val)=> val.value).reduce((prev, next)=>prev+next)
console.log(sumOfValue)

您可以将映射的数组包装成一个集合,并将其转换回数组,然后计算总和

Set对象允许您存储任何类型的唯一值

Array.from(
new Set(array.map(item=>item.value))
)
// or
[...new Set(array.map(item=>item.value))]

var array = [
{key:'pos',value:5,section:"one"},
{key:'pos',value:5,section:"Two"},
{key:'pos',value:5,section:"three"},
{key:'pos',value:5,section:"four"},
{key:'pos',value:5,section:"five"},
{key:'online',value:10,section:"one"},
{key:'online',value:10,section:"Two"},
{key:'online',value:10,section:"three"},
{key:'online',value:10,section:"four"},
{key:'online',value:10,section:"five"},
{key:'call',value:15,section:"one"},
{key:'call',value:15,section:"Two"},
{key:'call',value:15,section:"three"},
{key:'call',value:15,section:"four"},
{key:'call',value:15,section:"five"},
]
const sumOfValue = Array.from(new Set(array.map(item=>item.value))).reduce((prev, next) => prev + next);
console.log(sumOfValue)

使用reduce和Object.values 可以轻松实现这一点

var array = [{
key: "pos",
value: 5,
section: "one"
},
{
key: "pos",
value: 5,
section: "Two"
},
{
key: "pos",
value: 5,
section: "three"
},
{
key: "pos",
value: 5,
section: "four"
},
{
key: "pos",
value: 5,
section: "five"
},
{
key: "online",
value: 5,
section: "one"
},
{
key: "online",
value: 5,
section: "Two"
},
{
key: "online",
value: 5,
section: "three"
},
{
key: "online",
value: 5,
section: "four"
},
{
key: "online",
value: 5,
section: "five"
},
{
key: "call",
value: 5,
section: "one"
},
{
key: "call",
value: 5,
section: "Two"
},
{
key: "call",
value: 5,
section: "three"
},
{
key: "call",
value: 5,
section: "four"
},
{
key: "call",
value: 5,
section: "five"
},
];
const uniqueKeys = array.reduce((acc, curr) => {
const { key, value } = curr;
acc[key] = value;
return acc;
}, {});
const result = Object.values(uniqueKeys).reduce((acc, curr) => acc + curr);
console.log(result);

最新更新