Javascript for.in 对象属性

Javascript for..in on object property

本文关键字:属性 对象 in for Javascript      更新时间:2023-09-26

我有以下JSON:

{"data":[{"id":1,"client_id":1},{"id":2,"client_id":1}]}

我正在尝试做一个for...in但有些事情进展不顺利。

看看我的代码:

for (post in data) {
    console.log(post.client_id); //return undefined
}

但是如果我这样做:

for (i=0 ; i<data.length; i++) {
    console.log(data[i].client_id); //return the correct value
}

在这种情况下,为什么我不能迭代for..in

"data" 属性的值是一个数组。你需要:

for (var i = 0; i < json.data.length; ++i)
  console.log(json.data[i].client_id);

这是假设JSON已被解析并存储在名为"json"的变量中。 如果它实际上被称为"data",那么它将是"data.data"而不是"json.data"。

您确实不应该对真实数组使用for ... in循环。 由于各种原因,这是一个坏习惯。 使用数字索引或类似较新浏览器中可用的.forEach()功能。

首先,你永远不应该使用 for/in 迭代数组。 该结构循环访问对象的属性。 您将获得所有数组元素,但您也可以获得对象的其他可迭代属性。

数组应始终使用传统的for循环进行迭代,如下所示:

for (var i = 0; i < arr.length; i++) .

其次,您必须确保正确遵循自己的数据结构。 你有这个:

var item = {"data":[{"id":1,"client_id":1},{"id":2,"client_id":1}]};

它展开了一些看起来像这样:

var item = {
    "data":[
        {"id":1,"client_id":1},
        {"id":2,"client_id":1}
     ]
};

因此,您的 JSON 是一个对象。 该对象中有一个名为 data 的属性,该属性的值是一个包含对象的数组。 您将得到数组中的第一项:

item.data[0]

或者该对象上的属性如下所示:

item.data[0].id
item.data[0].client_id

您将像这样迭代该数组中的所有项目:

for (var i = 0; i < item.data.length; i++) {
    // access each object in the array
    item.data[i].id
    item.data[i].client_id
}

它应该是这样的:

for (var post in data) {
      console.log(data[post].client_id); //return undefined
}

这是使用进行迭代的正确形式...在

for (post in data) {
    console.log(post.client_id); //return undefined
}

你做错了,试试这样:

for (post in data) {
    console.log(data[post].client_id); //return undefined
}

您实际上还应该包含一个过滤器,因为原型中的东西可能会泄漏:

for (post in data) {
    if (data.hasOwnProperty(post)) {
        console.log(data[post].client_id); //return undefined
    }
}

这是因为你的 JSON 的结构。请注意,您有一个外部对象,只有一个顶级属性:data

{ "data":
    [
        {"id":1,"client_id":1},
        {"id":2,"client_id":1}
    ]
}

data没有client_id属性:它是您尝试迭代的子条目的数组,这些子条目具有client_id属性。这就是索引data循环工作的原因。