关联数组对象上的Javascript foreach循环

西蒙·户田(Simon Toda):

为什么我的for-each循环没有遍历我的JavaScript关联数组对象?

// defining an array
var array = [];

// assigning values to corresponding keys
array["Main"] = "Main page";
array["Guide"] = "Guide page";
array["Articles"] = "Articles page";
array["Forum"] = "Forum board";

// expected: loop over every item,
// yet it logs only "last" assigned value - "Forum"
for (var i = 0; i < array.length; i++) {
    console.log(array[i]);
}

编辑:jQuery each()可能会有所帮助:https : //api.jquery.com/jQuery.each/

尖的:

.length属性仅跟踪具有数字索引(键)的属性。您正在使用字符串作为键。

你可以这样做:

var arr_jq_TabContents = {}; // no need for an array

arr_jq_TabContents["Main"] = jq_TabContents_Main;
arr_jq_TabContents["Guide"] = jq_TabContents_Guide;
arr_jq_TabContents["Articles"] = jq_TabContents_Articles;
arr_jq_TabContents["Forum"] = jq_TabContents_Forum;

for (var key in arr_jq_TabContents) {
    console.log(arr_jq_TabContents[key]);
}

为了安全起见,在这样的循环中这样做是一个好主意,以确保所有属性都不是继承的意外结果:

for (var key in arr_jq_TabContents) {
  if (arr_jq_TabContents.hasOwnProperty(key))
    console.log(arr_jq_TabContents[key]);
}

编辑 -现在注意到该Object.keys()函数在现代浏览器和Node等中可用,可能是个好主意。该函数以数组形式返回对象的“自有”键:

Object.keys(arr_jq_TabContents).forEach(function(key, index) {
  console.log(this[key]);
}, arr_jq_TabContents);

传递给的回调函数.forEach()将由每个键以及由返回的数组中键的索引调用Object.keys()它也传递了函数在其中进行迭代的数组,但是该数组对我们没有真正的用处。我们需要原始对象可以直接通过名称访问它,但是(我认为)显式传递它要好一些,这是通过将第二个参数传递给.forEach()原始对象来实现的,该第二个参数将绑定this在回调内部。(仅在下面的评论中看到了这一点。)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章