Javascript 如何减少数组获取所需对象的总和?

Javascript 如何减少数组获取所需对象的总和?,javascript,arrays,Javascript,Arrays,我有一个庞大的对象数组,我需要求和所需的关键点。 我试着用它来做,但是,它无法工作。 即使我尝试使用acc[item.agent\u state]=acc+(+item.duration) 如注释中所述,您应该使用+=来递增。每次使用acc[item.agent\u state]=+item.duration只需重新分配属性 在尝试添加任何内容之前,您需要确保每个键的acc对象都已初始化为零。否则,您将得到NaN,因为您试图添加到未定义的值 例如: const sumValues=[ {age

我有一个庞大的对象数组,我需要求和所需的关键点。 我试着用它来做,但是,它无法工作。 即使我尝试使用
acc[item.agent\u state]=acc+(+item.duration)


如注释中所述,您应该使用
+=
来递增。每次使用
acc[item.agent\u state]=+item.duration
只需重新分配属性

在尝试添加任何内容之前,您需要确保每个键的
acc
对象都已初始化为零。否则,您将得到
NaN
,因为您试图添加到未定义的值

例如:

const sumValues=[
{agent_state:“state1”,持续时间:1},
{agent_state:“state2”,持续时间:1},
{agent_state:“state1”,持续时间:1},
{agent_state:“state1”,持续时间:1},
{agent_state:“state2”,持续时间:5},
{agent_state:“state1”,持续时间:10},
{agent_state:“state3”,持续时间:0}
]
const result=sumValues.reduce((acc、item、index、array)=>{
//在尝试添加内容之前,请初始化为0
如果(!acc.hasOwnProperty(item.agent\u state))acc[item.agent\u state]=0
acc[项目代理\状态]+=项目持续时间
返回acc
}, {})

console.log(result)
下面是一个使用
reduce
的工作示例。您的数据集相当大,因此我修剪了一些条目。完整数据集上的输出应为:

登录:343435,
注销:0,
未准备好:169516,
就绪:6632,
保留:28,
电话:373
const data=[{“agent_name”:“Bla McElroy”,“agent_login_id”:“agent4502”,“agent_extension”:“4502”,“transition_time”:“2018-09-10 12:20:51.835”,“agent_state”:“Logged in”,“reason_code”:“0”,“duration”:“34343434”,“latestsynchedtime”:null},{“agent_name”:“Bla McElroy”,“agent_login_id”:“agent4502”,“transition time”:“agent4502”,“transition_time”:“2018-09-10 12:20:51.837”,“代理状态”:“未准备好”,“原因代码”:“32760”,“持续时间”:“354”,“最新同步时间”:null},{“代理名称”:“Bla McElroy”,“代理登录id”:“agent4502”,“代理扩展”:“4502”,“过渡时间”:“2018-09-10 12:26:45.583”,“代理状态”:“注销”,“原因代码”:“32765”,“持续时间”:“0”,“最新同步时间”:null},{“代理名称”:”Bla McElroy,“代理登录id”:“代理T4502”,“代理扩展”:“4502”,“过渡时间”:“2018-09-10 12:29:05.848”,“代理状态”:“登录”,“原因代码”:“0”,“持续时间”:“1”,“最晚同步时间”:null},{“代理名称”:“Bla McElroy”,“代理登录id”:“代理T4502”,“代理扩展”:“4502”,“过渡时间”:“2018-09-10 12:29:05.85”,“代理状态”:“未准备就绪”原因代码“:”32760“,”持续时间“:”14“,”最新同步时间“:”null},{”代理名称“:”Bla McElroy“,”代理登录id“:”agent4502“,”代理扩展“,”4502“,”过渡时间“:”2018-09-10 12:29:19.266“,”代理状态“:”注销“,”原因代码“:”32767“,”持续时间“:”0“,”最新同步时间“:”null},{”代理名称“,”Bla McElroy“,”代理登录id“:”AGENTT4502“,”代理程序扩展“:”4502“,”转换时间“:”2018-09-10 12:29:19.395“,”代理程序状态“:”登录“,”原因代码“:”0“,”持续时间“,”最新同步时间“:”null},{”代理程序名称“:”Bla McElroy“,”代理程序登录id“:”代理程序4502“,”转换时间“:”2018-09-10 12:29:19.397“,”代理程序状态“:”未就绪“,”原因代码“:”32760“,”持续时间“:”192“,”latestsynchedtime:“空”{“代理名称”:“Bla McElroy”,“代理登录id”:“代理4502”,“代理扩展名”:“4502”,“过渡时间”:“2018-09-10 12:32:31.087”,“代理状态”:“就绪”,“原因代码”:“0”,“持续时间”:“159”,“最晚SynchedTime”:空”{“代理名称”:“Bla McElroy”,“代理登录id”:“代理4502”,“过渡时间”:2018-09-10 12:35:10.197,“代理状态”:“未准备好”,“原因代码”:“202”,“持续时间”:“233”,“最新同步时间”:null},{“代理名称”:“Bla McElroy”,“代理登录id”:“代理4502”,“代理扩展”:“4502”,“过渡时间”:“2018-09-10 12:39:03.256”,“代理状态”:“准备好”,“原因代码”:“0”,“持续时间”:“0”,“最新同步时间”:null},{,“代理名称”:”Bla McElroy,“代理登录id”:“代理登录id”:“代理扩展名”:“4502”,“过渡时间”:“2018-09-10 12:39:03.324”,“代理状态”:“保留”,“原因代码”:“0”,“持续时间”:“4”,“最晚同步时间”:null},{“代理名称”:“Bla McElroy”,“代理登录id”:“代理登录id”:“代理扩展名”:“4502”,“过渡时间”:“2018-09-10 12:39:07.374”,“代理状态”:“对话”原因代码“:”0“,”持续时间“:”10“,”latestsynchedtime“:”null},{”代理名称“:”Bla McElroy“,”代理登录id“:”4502“,”过渡时间“:”2018-09-10 12:39:17.926“,”代理状态“:”就绪“,”原因代码“:”0“,”持续时间“:”63“,”latestsynchedtime“:”null},{”代理登录id“:”Bla McElroy“,”代理登录id“:”Bla McElroy“,”代理登录id“:”代理扩展“:”agent4502“,”代理登录id“:”代理登录id“:”准备就绪“,”代理登录代码“,”持续时间“:”代理扩展4502,“过渡时间”:“2018-09-10 12:40:20.621”,“代理状态”:“未准备好”,“原因代码”:“203”,“持续时间”:“7692”,“最新同步时间”:null},{“代理名称”:“Bla McElroy”,“代理登录id”:“代理T4502”,“代理扩展”:“4502”,“过渡时间”:“2018-09-10 14:48:32.163”,“代理状态”:“注销”,“原因代码”:“32767”,“持续时间”:“0”,“最新同步时间”“:null},{“代理名称”:“Bla McElroy”,“代理登录id”:“agent4502”,“代理扩展名”:“4502”,“过渡时间”:“2018-09-10 14:48:32.204”,“代理状态”:“登录”,“原因代码”:“0”,“持续时间”:“0”,“最晚同步时间”:null},{“代理名称”:“Bla McElroy”,“代理登录id”:“agent4502”,“代理扩展名”:“4502”,“过渡时间”:“2018-09-10:48:32.206”,“代理状态”:“未准备就绪”,“原因代码”:“32760”,“持续时间”:“7”,“最新同步时间”:null},{“代理名称”:“Bla McElroy”,“代理登录id”:“代理4502”,“代理扩展名”:“4502”,“过渡时间”:“2018-09-10 14:48:39.89”,“代理状态”:“注销”,“原因代码”:“32767”,“持续时间”:“0”,“最新同步时间”:null},{“代理名称”:“Bla McElroy”,“代理登录id”:agent4502,“代理扩展”:“4502”,“过渡时间”:“2018-09-10 14:48:39.919”,“代理状态”:“登录”,“原因代码”:“0”,“持续时间”:“0”,“最新同步时间”:null},{“代理名称”:“Bla McElroy”,“代理登录id”:“agent4502”,“代理扩展”:“4502”,“过渡时间”:“2018-09-10 14:
const states = _.uniqBy(data, function (e) {
  return e.agent_state;
});

const mappedStates = states.map(item => item.agent_state)

// const mappedStates = ['Logged-in']

const sumValues = data.filter(item => {
  return mappedStates.includes(item.agent_state)
})



const result = sumValues.reduce((acc, item, index, array) => {
    acc[item.agent_state] = +item.duration
    return acc

}, {})