[英]Javascript array object arrays
这听起来像是一个愚蠢的问题,但事实确实如此。 我有一个像这样格式化的js数组
var locationID = [
{ ID: "ID1", location: "location1" },
{ ID: "ID2", location: "location2" },
{ ID: "ID3", location: "location3" },
];
我正在尝试遍历数组
for(i = 0; i < locationID.length;i++){
var object = locationID[i];
}
我想从内部数组中获取两个元素,以便获取ID和位置。 我会通过object[0]
或object["ID"]
来做到这一点。
还有一种更有效的方式来完成我需要做的事情,例如对每个循环或沿这些方向的东西。
使用object.ID
或object['ID']
。
JavaScript中的对象 {}
是关联数组或命名数组。 (在许多语言中也称为地图。它们通过字符串索引(在这种情况下)。
数组 []
由整数索引,从0
开始到n-1
为止,其中n
是数组的长度。
如果要以编程方式遍历每个对象中的所有(键,值)对,则可以使用此方法 。
在下面重申我对单引号和双引号的评论:
如果您在
[]
内谈论,则[]
[不重要]]。 JavaScript处理单引号和双引号几乎相同 。 它们都表示字符串文字。 有趣的是,您可以在双引号中使用单引号,反之亦然:"I wanted to say 'Hello world!'"
将是(单个)有效字符串,但是也会这样,但'But I accidentally said "Goodbye"
。
这是根据Nicholas Zackas(YAHOO性能负责人)的书而优化的循环。 我正在执行缓存的数组长度,以防止在每次循环迭代时重新评估数组长度。 请检查jsperf.com。 而且,本机循环总是比基于方法的循环jQuery.each和Array.prototype.forEach更快。 ie8以下的浏览器也支持此功能
var currentItem,
locationInfo = [
{ ID: "ID1", location: "location1" },
{ ID: "ID2", location: "location2" },
{ ID: "ID3", location: "location3" },
];
for (var i = 0, len = locationInfo.length; i < len; i++) {
currentItem = locationInfo[i];
console.log(currentItem.ID);//I prefer this because it shrinks down the size of the js file
console.log(currentItem["ID"]);
}
运行循环时,已经拥有的将返回JSON中的每个对象。 您需要的是类似
for(i = 0; i < locationID.length;i++){
var object = {locationID[i].ID, locationID[i].location};
}
请记住,对象的属性是通过键值访问的,因为它们是键值对。
您可以使用forEach方法,从而使您的代码更清晰。
见每个
locationID.forEach(function(elm){
//Here, elm is my current object
var data = elm;
console.log(data.ID):
console.log(data.location);
});
编辑:然后对于第二个问题,您应该过滤和映射方法。
function findNamebyID(id){
//Filter by id and map the data to location
return locationID.filter(function(elm){
return elm.ID === id;
}).map(function(elm){
return elm.location;
})
}
就速度而言,for循环将是您最好的选择,这是使用forEach(IE 9+)的方法
locationID.forEach(function(location, i){
console.log(location['ID'])
console.log(location['location'])
});
jQuery使它变得更简单但运行更慢
$.each(array, function(i, item){
});
http://jsperf.com/for-vs-foreach/75
这里还有一个有用的链接: 在JavaScript中对数组进行逐个调用?
如:
var location = locationID.reduce(function(ob, cur) {
ob[cur.ID] = cur.location;
return ob;
}, {});
您得到的结果是:
Object {ID1: "location1", ID2: "location2", ID3: "location3"}
这意味着您可以:
location.ID1 // location1
location.ID2 // location2
...
循环的一种替代方法是将JavaScript for (.. in ..)
因为您实际上并未使用迭代器; 它只会增加绒毛
for(i = 0; i < locationID.length;i++){
var object = locationID[i];
}
可以写成:
for (item in locationID) {
var object = item;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.