【问题标题】:I m confused with Object.entries()[i]我对 Object.entries()[i] 感到困惑
【发布时间】:2018-06-02 06:01:54
【问题描述】:

我已经检查了这个页面:mozilla documentation

我不明白为什么索引 0 带有:

const object3 = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.entries(object3)[0]);

// expected output: Array ["100", "a"] <== i thought of this

相反,文档说你得到了:

// expected output: Array ["2", "b"]

谁能解释一下为什么?

【问题讨论】:

  • 根据规范,属性名称的排序不可靠。他们经常碰巧在现代 JS 解释器中,但你不能指望它。在这种情况下,可能最后看到 100 的属性,因为 100 大于 2 和 7。
  • 对象是无序的。或者,它们不需要保持其属性的一致或可预测的顺序。引擎只需要保证,在给定的循环中,每个属性只被访问一次。 – Does JavaScript Guarantee Object Property Order?
  • 根据文档,您可以尝试使用 for..in 循环来控制台记录它以了解顺序。但是,不能保证对象中键的顺序

标签: javascript object documentation


【解决方案1】:

文档说Object.entries 返回一个给定对象的数组,可枚举属性[key,value]pairs。所以是的,如果你看这个陈述,它会让人困惑

const object3 = { 100: 'a', 2: 'b', 7: 'c' };

当您致电Object.entries(object3)[0] 时,最终会得到["2", "b"]

当您这样做 Object.entries(object3)[0] 时,您正在访问此函数 Object.entries(object) 返回的索引 0 处的一对。该数组的顺序与您最初定义object3 的方式无关。根据文档的顺序与a提供的相同 for...in 循环。我在对象上运行了 for...in 循环,这就是我得到的命令。

2,7,100

这就是为什么你得到["2", "b"] 而不是["100", "a"]。正如其他人在这里提到的那样,顺序似乎是这样的,因为 2

【讨论】:

  • 不保证订单参考here 它说same order as that provided by a for...in loopfor ... in documentation 状态:A for...in loop iterates over the properties of an object in an arbitrary order 所以不能保证 for ... in、Object.keys 和对象条目
【解决方案2】:

这是因为对象具有数字键,当您使用数字键操作对象时,javascript 会按 key 值的升序对 key-values 进行排序,因为您有键 27、和100。所以,当你console.log对象Object.entries(object3)你得到排序时检查这个,当你访问[0]你得到Array ["2", "b"]

const object3 = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.entries(object3));

进一步说明在 key 为数字时通过升序对对象进行排序。 javascript 在幕后对它们进行排序。

var a = {
  10: 'ten',
  5: 'five',
  11: 'eleven',
  1: 'one'
};
console.log(a);

【讨论】:

  • JSON object 没有这样的事情。
  • JSON 是 Javascript 对象表示法,一种格式化字符串以表示对象的方法。字符串可以是 JSON 格式,但(未序列化的)对象只是一个对象。
  • @CertainPerformance 你应该阅读这个w3schools.com/js/js_json_objects.asp
  • @AnkitAgarwal JSON 是一种基于 JS 的数据交换格式(因此 JSON 中的 J)。没有像 JSON 对象 这样的东西。
  • @MatusDubrava 问题不是 W3C,而是 w3schools,这是一个完全不同的东西,一个与万维网联盟无关的平庸教程网站。
猜你喜欢
  • 1970-01-01
  • 2016-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-14
  • 2013-07-28
  • 1970-01-01
相关资源
最近更新 更多