为什么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]);
}
jQueryeach()
可能会有帮助:https://api.jquery.com/jQuery.each/
属性仅跟踪具有数字索引(键)的属性。你用字符串作为钥匙。
您可以这样做:
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]);
}
编辑-现在最好注意对象。keys()
函数在现代浏览器和节点等中可用。该函数以数组形式返回对象的“自有”键:
Object.keys(arr_jq_TabContents).forEach(function(key, index) {
console.log(this[key]);
}, arr_jq_TabContents);
传递给. foreach()
的回调函数是通过Object.keys()
返回的数组中的每个键和键的索引来调用的。它还传递了函数迭代所通过的数组,但是该数组对我们并不真正有用;我们需要原始对象。它可以通过名称直接访问,但是(在我看来)显式地传递它会更好一点,这是通过将第二个参数传递给来实现的。回调里面。(刚刚看到下面的评论中提到了这一点。)
这是非常简单的方法。优点是你也可以得到钥匙:
for (var key in array) {
var value = array[key];
console.log(key, value);
}
对于ES6:
array.forEach(value => {
console.log(value)
})
对于ES6(如果您想要值,索引和数组本身):
array.forEach((value, index, self) => {
console.log(value, index, self)
})
如果Node.js或浏览器支持Object.entries()
,它可以用作使用Object.keys()
的替代方法。
const h = {
a: 1,
b: 2
};
Object.entries(h).forEach(([key, value]) => console.log(value));
// logs 1, 2