让我们考虑以下代码
var array = [];
var obj =[{id: "xxxxx", name: "Friend name"}, {id: "xxxxx", name: "Friend name"}]
for (x in obj){
array.push(x.name)
}
我最终得到的数组具有适当的长度,但是填充了空值。我把这个obj.name改成了随机字符串,一切都很好。值得一提的是,相应的代码涉及angular.js,我在迭代解析的json时遇到了这个问题。但即使我粘贴了这个名为“obj”的简单数组,问题仍然存在。
我提出问题必须是将字典值推入数组,对不对?如果是,那有什么不对?
提前致谢!
答案 0 :(得分:4)
代码的问题在于代码
for (x in obj)
x将是obj中每个元素的索引,这意味着不是获取元素本身,而是获得obj.indexOf(element)。
在您的情况下,x将为0,1。因此x.name将是未定义的。
修改您的代码:
var array = [];
var obj =[{id: "xxxxx", name: "Friend name"}, {id: "xxxxx", name: "Friend name"}]
for (x in obj){
array.push(obj[x].name)
}
你应该好好去。
答案 1 :(得分:3)
不要将for..in用于数组,请尝试此操作
for (var i = 0, len = obj.length; i < len; i++){
array.push(obj[i].name)
}
在您的情况下,您尝试在name
中获取x
,但x
是属性名称而不是对象。
答案 2 :(得分:2)
您需要使用obj[x].name
代替x.name
。在这种情况下,x
只是一个索引。 obj[x]
将返回索引为x
的项目,即obj[0]
,obj[1]
。
x.name
基本上是0.name
,这没有用。
答案 3 :(得分:1)
对于javascript词典,我通常只使用特别组织的对象。由于字典每个键只应有一个条目,因此我将键分配给对象 property 。 Javascript包含bracket notation来获取属性。
很酷的是,你可以使用属性分配新属性和“索引”:
var dictionary= {};
var obj =[{id: "id1", name: "Friend name"}, {id: "id2", name: "Friend name"}]
obj.forEach(function (o) {
dictionary[o.id] = o; //adds more properties whose label are unique ids
}
要从字典中提取,您可以使用键(id)“索引”。
var id = "id1";
var person = dictionary[id]; //is {id: "id1", name: "Friend name"}
您仍然可以通过遍历其属性来遍历字典。