JavaScript - 无法将字典值添加到数组
JavaScript - Can't add dictionary value to an array
让我们考虑以下代码
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" 的简单字典数组,问题仍然存在。
我认为问题一定出在将字典值压入数组,对吗?如果是,有什么问题吗?
提前致谢!
数组不要用for..in,试试这个
for (var i = 0, len = obj.length; i < len; i++){
array.push(obj[i].name)
}
在您的情况下,您尝试在 x
中获取 name
,但 x
是 属性 名称而不是对象。
您需要使用 obj[x].name
而不是 x.name
。 x
在这种情况下只是一个索引。 obj[x]
将 return 一个索引为 x
的项目,即 obj[0]
、obj[1]
.
而x.name
基本上就是0.name
,没有意义。
您的代码存在问题,在代码中
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)
}
你应该可以开始了。
对于javascript 词典,我通常只使用专门组织的对象。由于字典每个键应该只有一个条目,我将键分配给一个对象 属性。 Javascript 包含一个 bracket notation 来获取属性。
很酷的是,您可以分配新属性并 "index" 使用属性:
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
}
要从字典中提取,您可以 "index" 使用键 (id)。
var id = "id1";
var person = dictionary[id]; //is {id: "id1", name: "Friend name"}
您仍然可以通过遍历其属性来遍历字典。
让我们考虑以下代码
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" 的简单字典数组,问题仍然存在。
我认为问题一定出在将字典值压入数组,对吗?如果是,有什么问题吗?
提前致谢!
数组不要用for..in,试试这个
for (var i = 0, len = obj.length; i < len; i++){
array.push(obj[i].name)
}
在您的情况下,您尝试在 x
中获取 name
,但 x
是 属性 名称而不是对象。
您需要使用 obj[x].name
而不是 x.name
。 x
在这种情况下只是一个索引。 obj[x]
将 return 一个索引为 x
的项目,即 obj[0]
、obj[1]
.
而x.name
基本上就是0.name
,没有意义。
您的代码存在问题,在代码中
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)
}
你应该可以开始了。
对于javascript 词典,我通常只使用专门组织的对象。由于字典每个键应该只有一个条目,我将键分配给一个对象 属性。 Javascript 包含一个 bracket notation 来获取属性。
很酷的是,您可以分配新属性并 "index" 使用属性:
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
}
要从字典中提取,您可以 "index" 使用键 (id)。
var id = "id1";
var person = dictionary[id]; //is {id: "id1", name: "Friend name"}
您仍然可以通过遍历其属性来遍历字典。