Javascript数组对象数组

Javascript数组对象数组,javascript,arrays,Javascript,Arrays,这听起来像是个愚蠢的问题,但问题来了。我有一个js数组,格式如下 var locationID = [ { ID: "ID1", location: "location1" }, { ID: "ID2", location: "location2" }, { ID: "ID3", location: "location3" }, ]; 我正试图在数组中循环 for(i = 0; i < locat

这听起来像是个愚蠢的问题,但问题来了。我有一个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和位置。例如,我是通过对象[0]还是对象[ID]来执行此操作

还有一种更有效的方法来完成我需要做的事情,比如为每一个循环或沿着这些线做的事情。

使用object.ID或object['ID']

JavaScript中的对象{}是关联数组或命名数组。在许多语言中也称为地图。在本例中,它们由字符串索引

数组[]由整数索引,从0开始,一直计数到n-1,其中n是数组的长度

如果希望以编程方式遍历每个对象中的所有键、值对,可以使用

引号字符串文字 在下面重申我对单引号和双引号的评论:

如果你说的是[],不[,它们不重要]。它们都表示 字符串文本。有趣的是,您可以在内部使用单引号 双引号,反之亦然:我想说“你好,世界!”会是 一个有效的字符串,但也可以,但我无意中说了再见

使用object.ID或object['ID']

JavaScript中的对象{}是关联数组或命名数组。在许多语言中也称为地图。在本例中,它们由字符串索引

数组[]由整数索引,从0开始,一直计数到n-1,其中n是数组的长度

如果希望以编程方式遍历每个对象中的所有键、值对,可以使用

引号字符串文字 在下面重申我对单引号和双引号的评论:

如果你说的是[],不[,它们不重要]。它们都表示 字符串文本。有趣的是,您可以在内部使用单引号 双引号,反之亦然:我想说“你好,世界!”会是 一个有效的字符串,但也可以,但我无意中说了再见


循环的另一种替代方法是使用JavaScript for。。在里面因为你没有真正使用迭代器;它只是增加了绒毛

for(i = 0; i < locationID.length;i++){
   var object = locationID[i];
}

循环的另一种替代方法是使用JavaScript for。。在里面因为你没有真正使用迭代器;它只是增加了绒毛

for(i = 0; i < locationID.length;i++){
   var object = locationID[i];
}

这是一个基于Nicholas Zackas YAHOO performance chief一书的优化循环。我正在执行缓存的数组长度,以防止在循环的每次迭代中重新计算数组长度。请访问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"]);
    }

这是一个基于Nicholas Zackas YAHOO performance chief一书的优化循环。我正在执行缓存的数组长度,以防止在循环的每次迭代中重新计算数组长度。请访问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};
}

请记住,对象的属性是通过键访问的,因为它们是键值对。

在运行循环时,您已经拥有的将返回JSON中的每个对象。你需要的是

for(i = 0; i < locationID.length;i++){
   var object = {locationID[i].ID, locationID[i].location};
}
请记住,对象的属性是通过其键访问的,因为它们是键值对。

您可以使用forEach方法,这会使代码更清晰

编辑: 然后,对于第二个问题,您应该过滤和映射方法

您可以使用forEach方法,这使您的代码更干净

编辑: 然后,对于第二个问题,您应该过滤和映射方法


就速度而言,循环将是您的最佳选择,以下是您如何使用forEach IE 9+

locationID.forEach(function(location, i){
    console.log(location['ID'])
    console.log(location['location'])
});
jQuery使它变得更简单,但运行速度较慢

$.each(array, function(i, item){

});

这里还有一个有用的链接:

因为循环将是你在速度方面的最佳选择,下面是你如何使用forEach IE 9+

locationID.forEach(function(location, i){
    console.log(location['ID'])
    console.log(location['location'])
});
jQuery使它变得更简单,但运行速度较慢

$.each(array, function(i, item){

});
这里还有一个有用的链接:

如下:

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
...
例如:

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
...

object[ID]和object[location]应该可以很好地工作,没有比这更有效的了,只是其他的方法做同样的事情,毕竟你需要遍历所有你不打算比较object['ID']==ID吗?object[ID]和object[location]应该很好,没有比这更有效的了,只是其他方法做同样的事情,毕竟,你需要遍历所有对象,难道你不想比较object['ID']==ID?当object=locationID[i]时,他为什么需要这样做;已经做了同样的事情吗?我的意思是用它来代替他所说的循环

当前有,它将为循环的每次迭代返回一个对象,为什么当object=locationID[i]时他需要这样做;已经在做同样的事情了吗?我的意思是让它替换他当前拥有的循环,并且它将为该循环的每次迭代返回一个对象loop@RickHitchcock准确性提高。为了避免混淆,我删除了我的评论。。很抱歉,值得一提的是,在我的例子中,我想说的是单人房和双人房的区别quotes@sircapsalot这仅适用于具有特殊字符和无效标识符的属性。您应该避免在常规属性(例如您自己定义的属性)中使用这些字符。保持对象和关联数组在逻辑上的分离。@RickHitchcock准确性得到提高。为了避免混淆,我删除了我的注释。。很抱歉,值得一提的是,在我的例子中,我想说的是单人房和双人房的区别quotes@sircapsalot这仅适用于具有特殊字符和无效标识符的属性。您应该避免在常规属性(例如您自己定义的属性)中使用这些字符。保持对象和关联数组的使用在逻辑上分开。用于。。请提供该断言的来源。for..in对于索引顺序很重要的数组很好。-OP的命令不重要,是为了。。请提供该断言的来源。for..in对于索引顺序很重要的数组很好。-OP的顺序并不重要虽然您确实在优化循环,但这种微观优化往往会使代码变得混乱,使程序员感到困惑,并带来微不足道的性能好处。此外,[].length是一个数字,而不是一个函数,因此我无法看到缓存该值将如何提高性能。最后,使用。符号而不是[]是不必要的。在这一点上,最好缩小您的代码。@像jQuery这样的Shadowen框架使用相同的策略。你是说他们做错了吗?绩效增益总是一种增益@Shadowen,查看高性能JavaScript第63页。尼古拉斯·扎卡斯写的。如果你比他好,那么我会同意;你只是在谷歌上搜索而已。我代表一位作者进行辩论:我将重复我的问题。你比他好吗?我用jsperf作为实验证据。毕竟,我们关心的是真实世界的表现,而不是作者所说的最好。此外,谷歌是一个伟大的信息来源。有点像。虽然您确实在优化循环,但这种微观优化往往会使代码变得混乱,使程序员感到困惑,并带来微不足道的性能好处。此外,[].length是一个数字,而不是一个函数,因此我无法看到缓存该值将如何提高性能。最后,使用。符号而不是[]是不必要的。在这一点上,最好缩小您的代码。@像jQuery这样的Shadowen框架使用相同的策略。你是说他们做错了吗?绩效增益总是一种增益@Shadowen,查看高性能JavaScript第63页。尼古拉斯·扎卡斯写的。如果你比他好,那么我会同意;你只是在谷歌上搜索而已。我代表一位作者进行辩论:我将重复我的问题。你比他好吗?我用jsperf作为实验证据。毕竟,我们关心的是真实世界的表现,而不是作者所说的最好。此外,谷歌是一个伟大的信息来源。有点像。这看起来太复杂了。而且很难理解,特别是对于任何类型的初学者。人们应该检查reduce,因为它是我们日常使用的所有其他功能的核心,如map、foreach和类似功能。。这比使用for更简单。我想您需要地图作为您的方法,但您可能需要再次阅读原始问题。我不确定你是不是在解决一个与作者意图完全不同的问题……这似乎太复杂了。而且很难理解,特别是对于任何类型的初学者。人们应该检查reduce,因为它是我们日常使用的所有其他功能的核心,如map、foreach和类似功能。。这比使用for更简单。我想您需要地图作为您的方法,但您可能需要再次阅读原始问题。我不确定你解决的问题是否与作者的意图完全不同。。