为什么我的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] 删除。
我来说两句