为什么我的for- 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/
这是一个非常简单的方法。好处是你也可以得到钥匙:
for (var key in array) {
var value = array[key];
console.log(key, value);
}
For ES6:
array.forEach(value => {
console.log(value)
})
对于ES6(如果你想要值,索引和数组本身):
array.forEach((value, index, self) => {
console.log(value, index, self)
})
这在大多数情况下(本质上)是不正确的:
var array = [];
array["Main"] = "Main page";
这将在名为Main的数组上创建一个非元素属性。虽然数组是对象,但通常不希望在数组上创建非元素属性。
如果你想通过这些名称索引到数组中,通常你会使用Map或普通对象,而不是数组。
用一个地图(ES2015+),我称之为地图,因为我很有创意:
let map = new Map();
map.set("Main", "Main page");
然后使用它的值、键或入口方法中的迭代器迭代它,例如:
for (const value of map.values()) {
// Here, `value` will be `"Main page"`, etc.
}
使用一个普通对象,我创造性地称之为obj:
let obj = Object.create(null); // Creates an object with no prototype
obj.Main = "Main page"; // Or: `obj["Main"] = "Main page";`
然后使用Object迭代它的内容。钥匙,对象。values,或Object。条目,例如:
for (const value of Object.values(proches_X)) {
// Here, `value` will be `"Main page"`, etc.
}