Javascript for.in 对象属性
Javascript for..in on object property
我有以下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
循环工作的原因。
- 为什么我可以在Array属性对象中找到Javascript Array for Each方法
- 使用onclick调用属性对象函数
- 嵌套为..in 循环,列出多维对象的属性(对象)
- 动态属性对象 - JSON
- 在不使用隔离范围angularjs自定义指令的情况下获取属性对象
- 通过属性传递属性/对象.Javascript
- Javascript:属性/对象的类型
- 访问JSON中的属性(对象)
- 属性对象Javascript不是用Jquery Deferred设置的
- 无法读取属性'#<对象>'未定义的获取错误
- Twitter中多属性对象的子字符串匹配
- 无法设置'data'属性'对象'标记.(只IE8)
- 更新数据属性对象属性值
- 将属性对象的选定对象从原型推入数组
- 将单个属性对象字面量的数组转换为仅包含其值的数组的最佳方法
- 寻找一种更简单的方法来检查是否多个属性&对象中的方法是未定义的
- 主干模型:带有get方法的空属性,但在属性对象中
- 如何赋值给"text"someText"属性对象在动能js
- Angularjs的数据绑定与数据属性对象
- 如何将一个嵌套的javascript对象转换为只有一级属性对象