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变成对象;在这里检查减少的定义