【发布时间】:2016-08-23 20:36:51
【问题描述】:
好的,这个问题被搁置了,原因如下;
“这个问题是由无法再重现的问题或简单的印刷错误引起的。”
我只是想确认问题在 stackoverflow 沙箱、repl.it sanbox 甚至 Firefox 控制台上仍然存在,这肯定不是错字。将代码复制粘贴到 Firefox 控制台,它将无法正常工作。
我一直在尝试根据一个特定属性对 Map 对象中的多个对象进行排序。我更喜欢使用箭头函数和数组方法。似乎Array.prototype.reduce() 不接受新的 Map 对象作为开始的初始参数。我也不明白的是,虽然 Map 对象不会被填充,但最后它的大小显示了正确的值,就好像它确实一样。谁能告诉我这里发生了什么..?为什么 Map 对象在大小显示为 3 时看起来是空的。
var myClients = {
'cccc': { newValue: 'test three', timeTest: 3 },
'bbbb': { newValue: 'test two', timeTest: 2 },
'aaaa': { newValue: 'test one', timeTest: 1 }
};
var mc = Object.keys(myClients)
.sort((p,c) => myClients[p].timeTest <= myClients[c].timeTest ? -1 : 1)
.reduce((p,c) => {p.set(c, myClients[c]); console.log(p.size); return p}, new Map());
console.log(mc, mc.size);
你可以试试here。
好的,我已经接受了一些答案,但即使在 stackjoverflow 沙箱中也无法正确显示。检查一下
var myClients = {
'cccc': {
newValue: 'test three',
timeTest: 3
},
'bbbb': {
newValue: 'test two',
timeTest: 2
},
'aaaa': {
newValue: 'test one',
timeTest: 1
}
},
mc = Object.keys(myClients)
.sort((p, c) => myClients[p].timeTest <= myClients[c].timeTest ? -1 : 1)
.reduce((p, c) => {
p.set(c, myClients[c]);
console.log(p.size);
return p
}, new Map());
document.write("<pre>" + JSON.stringify(mc, null, 2) + "</pre>");
【问题讨论】:
-
我无法重现,您的代码工作正常。究竟是什么意外?
-
@Bergi 我依赖 repl.it 控制台.. 这似乎是问题所在。 :(
-
@Bergi 似乎除了 Chrome 控制台之外,它在任何地方都不起作用。例如,Firefox 无法正常运行。所以它是可重现的,当然不是错字。
标签: javascript arrays dictionary ecmascript-6 reduce