首页 > 解决方案 > RamdaJS:对象操作后,我的键按字母顺序重新排序?预期的?

问题描述

这似乎发生在我正在使用的很多 Ramda 函数中。例如,我正在阅读以下文档mergeAllhttps ://ramdajs.com/docs/#mergeAll

文档示例指出:

R.mergeAll([{foo:1},{bar:2},{baz:3}]); //=> {foo:1,bar:2,baz:3}

这就是我想要的!

如果我在 Ramda REPL 中尝试完全相同的命令:

https://ramdajs.com/repl/?v=0.26.1#?R.mergeAll%28%5B%7Bfoo%3A1%7D%2C%7Bbar%3A2%7D%2C%7Bbaz%3A3%7D%5D% 29%3B

输出是: {"bar": 2, "baz": 3, "foo": 1}

对象键按字母顺序排序。这是预期的行为并且文档不正确吗?

我现在正在尝试做一些关键顺序相当重要的事情,而这种按字母顺序排序是一个问题!:(

标签: javascriptecmascript-6ramda.js

解决方案


这只是 REPL 输出格式的产物。

使用的另一个版本console.log表明它们确实符合您的预期。但是,我强烈同意 Pointy 的观点,即人们应该避免在几乎任何事情上都指望这个订单。

Ramda 团队讨论了在创建对象时实际上按字母顺序对键进行排序,以避免某些类别的错误。这是有争议的,即使在几年后也没有做出任何决定。


推荐阅读