【问题标题】:Loop Through Array inside Object in Javascript [duplicate]在Javascript中循环遍历对象内部的数组[重复]
【发布时间】:2012-03-14 12:29:50
【问题描述】:

可能重复:
Loop through Json object

{
  "data": [
    {
      "name": "Jen",
      "id": "1"
    },
    {
      "name": "Steve",
      "id": "8"
    }
  ]
}

我正在与之交互的服务器响应上述内容。

我正在尝试遍历 itenter code here 以获取 For..in 语句。

这就是我想要做的:

for (var item in response.data) {
  console.log(item.name);
}

这不起作用。 出了什么问题?

谢谢

阅读评论后,我开始使用以下内容:

for (var item in response.data) {
  console.log(response.data[item].name);
}

我能够得到一个名字列表...

有人能分析一下为什么它会起作用吗?

【问题讨论】:

  • 你确定那是 JavaScript 而不是 JSON?
  • 不合适的副本。这是与链接对象结构不同的对象结构。
  • 不重复那个问题!他在阵列上循环!
  • 我们可以询问多少次如何在 StackOverflow 上循环遍历数组/对象。我敢打赌这是第 100 次;确实看到了:google.com/… 还有“你确定那是 Javascript 而不是 JSON”的评论吗?你知道 JSON 代表什么吗?
  • @GeorgeJempty - 关于 JSON,你是什么意思? JSON 不是 JavaScript 的一部分,它只是看起来像它......区分 JavaScript 对象和 JSON 对于任何使用任何一个都至关重要......

标签: javascript arrays for-loop javascript-objects


【解决方案1】:

查看:Why is using "for...in" with array iteration a bad idea?

For...in 遍历对象属性的名称。数组项也被视为“属性”,因此 for..in 遍历索引(在您的情况下为 0、1)。正如预期的那样,当您使用 response.data[0] 时,您将获得数组的第一个元素。

【讨论】:

  • 谢谢!你回答了我的问题!
【解决方案2】:

for..in 以无特定顺序迭代对象的可枚举属性(您可能在不同的浏览器中得到不同的顺序)。数组只是一个普通对象,具有特殊的长度方法和从 Array.prototype 继承的方便方法(其中一些依赖于特殊的长度属性)。对属性名称可以使用什么没有限制,它们不限于非负整数(请注意,如果正确的名称不是有效的标识符,则必须使用方括号表示法来访问其值)。

数组的索引只是非负整数的字符串属性名称(即它们只是普通对象属性名称),因此for..in 循环将遍历数字索引(同样,不一定是升序或降序)以及所有其他可枚举属性,包括 [[Prototype]] 上的属性。因此,除非您想包含继承的可枚举属性,否则始终建议在 for..in 中包含 hasOwnProperty 测试。

由于上述原因,通常使用从0array.length - 1 的计数器迭代数组属性要好得多(因为长度总是比最后一个索引大一)。

要测试“无特定顺序”语句,请在 IE 和其他浏览器中尝试以下操作并注意不同的顺序:

var a = [];
a[2] = 2;
a[0] = 0;
a[3] = 3;
var b = [];
for (var i in a) b.push(a[i]);
alert(b);

【讨论】:

    【解决方案3】:

    data 实际上是一个数组(由[] 表示),而不是一个对象,因此您需要一个常规的for 循环而不是for in

    for (var i = 0; i<response.data.length; i++) {
      // use i as an array index
      console.log(response.data[i].name);
    }
    

    在 JavaScript 中,for in 构造用于迭代对象属性,但要迭代数组,通常使用增量 for 循环。

    【讨论】:

    • 我能够使用上述格式。我只是好奇如何用 For..in 来做,但是谢谢!这证实了我
    猜你喜欢
    • 1970-01-01
    • 2016-07-08
    • 2021-05-21
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    相关资源
    最近更新 更多