RamdaJS:对象操作后,我的键会按字母顺序重新排序吗?预期的?
RamdaJS: After an object operation my keys are getting re-ordered alphabetically? Expected?
这似乎发生在我使用的很多 Ramda 函数上。例如,我正在阅读 mergeAll
的文档:
https://ramdajs.com/docs/#mergeAll
文档示例指出:
R.mergeAll([{foo:1},{bar:2},{baz:3}]); //=> {foo:1,bar:2,baz:3}
这就是我想要的!
如果我在 Ramda REPL 中尝试完全相同的命令:
输出为:
{"bar": 2, "baz": 3, "foo": 1}
对象键正在按字母顺序排序。这是预期的行为并且文档不正确吗?
我现在正在尝试做一些关键顺序相当重要的事情,而这种按字母顺序排序证明是一个问题! :(
这只是 REPL 输出格式的产物。
使用 console.log
的 Another version 表明它们确实按照您期望的顺序排列。但是,我非常同意 Pointy 的观点,即几乎所有事情都应该避免指望这一订单。
Ramda 团队 has discussed 实际上在创建对象时按字母顺序排列键以避免某些 class 错误。这是有争议的,即使过了几年也没有就此做出决定。
这似乎发生在我使用的很多 Ramda 函数上。例如,我正在阅读 mergeAll
的文档:
https://ramdajs.com/docs/#mergeAll
文档示例指出:
R.mergeAll([{foo:1},{bar:2},{baz:3}]); //=> {foo:1,bar:2,baz:3}
这就是我想要的!
如果我在 Ramda REPL 中尝试完全相同的命令:
输出为:
{"bar": 2, "baz": 3, "foo": 1}
对象键正在按字母顺序排序。这是预期的行为并且文档不正确吗?
我现在正在尝试做一些关键顺序相当重要的事情,而这种按字母顺序排序证明是一个问题! :(
这只是 REPL 输出格式的产物。
使用console.log
的 Another version 表明它们确实按照您期望的顺序排列。但是,我非常同意 Pointy 的观点,即几乎所有事情都应该避免指望这一订单。
Ramda 团队 has discussed 实际上在创建对象时按字母顺序排列键以避免某些 class 错误。这是有争议的,即使过了几年也没有就此做出决定。