日志记录阵列上未定义


var obj1 = []
obj1 = positionx.reduce(function (acc, curr) {
return acc[curr] ? ++acc[curr] : acc[curr] = 1, acc
}, {});

positionx是一组重复对象的数组,如

[
'Orchestrator', 'Architect',      'Liaison',        'Analyst',
'Liaison',      'Officer',        'Liaison',        'Liaison',
'Coordinator',  'Specialist',     'Orchestrator',   'Designer',
'Planner',      'Orchestrator',   'Developer',      'Supervisor',
'Executive'....
] 

console.log(obj1)给出

{
Orchestrator: 5,
Architect: 6,
Liaison: 7,
Analyst: 7,
Officer: 2,
Coordinator: 3,
Specialist: 6,
Designer: 2,
...
}

console.log(obj1[1])输出undefined

有办法解决这个问题吗?

感谢

您的输出是一个包含键的对象。对象实际上没有隐式顺序,必须由其键引用。

obj1[1] // doesn't make sense because obj1 is an object, not an array.
obj1["Architect"] // does make sense and would equal 6.

如果你想迭代一个对象,就像迭代一个数组一样,你会想做这样的事情:

Object.keys(obj1).forEach(key => console.log(key, obj1[key]));

请注意,在本例中,我们正在迭代的数组是该对象中的键数组。没有隐式顺序,因此我们不能可靠地期望对象的第n个值始终相同。例如,如果您只获取对象中的第一个键,则不能保证该键的名称为";Orchestrator";。

将一个空对象作为initialValue传递给reduce函数;这意味着在reduce完成之后,obj1变成对象;在这里检查减少的定义

最新更新