好像map
,forEach
,filter
和這種運營商與字符串索引的數組,像這樣不工作:JavaScript數組操作
let a = [];
a['first element'] = 1;
a['second element'] = 2;
a['third element'] = 3;
a.forEach(console.log)
//undefined
好像map
,forEach
,filter
和這種運營商與字符串索引的數組,像這樣不工作:JavaScript數組操作
let a = [];
a['first element'] = 1;
a['second element'] = 2;
a['third element'] = 3;
a.forEach(console.log)
//undefined
這是因爲它不是一個「串索引陣列「。 JavaScript沒有這些。你在那裏有一個數組(因爲你使用了[]
),但是你並沒有將它作爲一個數組使用,所以你將它用作一個對象。 (數組也是對象;請參閱我的A myth of arrays。)這些是對象屬性名稱。如果您沒有使用它的數組性質,請使用{}
而不是[]
來創建它。
有幾個操作進行迭代屬性名稱:
Object.keys
得到一個對象自己的,枚舉的屬性名稱的數組。還有Object.getOwnPropertyNames
。for-in
循環遍歷所有可枚舉的屬性(包括繼承的屬性)。for-of
,但是如果你想要類似「字符串索引數組」的東西,你可以看看Map
,這是可迭代的。這裏有幾個例子:
let a = {};
a['first element'] = 1;
a['second element'] = 2;
a['third element'] = 3;
console.log("for-in:");
for (let key in a) {
console.log(key);
}
console.log("Object.keys:");
Object.keys(a).forEach(key => console.log(key));
這是因爲當你訪問一個這樣的數組:
a['first element']
你不能訪問數組元件。你將一個屬性放入數組對象中。
您可以通過兩種方式訪問JavaScript對象中的屬性:obj.property或obj ['property']。一個數組是一個像其他任何對象一樣的對象,它有一些方法可以將元素放入數組中(.push),但由於它是一個對象,除了元素之外,它還可能具有其他屬性。它已經有一些(如.length)。所以你只是包括更多。
對於你的pupose(地圖)而不是使用數組對象,你可以使用一個空對象。就像這樣:
let a = {};
a['first element'] = 1;
a['second element'] = 2;
a['third element'] = 3;
// then you use for...in instead of forEach:
for(element in a) {
// and get the value of the property in the element like this:
console.log(a[element]);
}
另外還有新的地圖和WeakMap對象。你想看看他們在這裏的鏈接:https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Map
下面是使用地圖的例子:
所有的var a = new Map();
a.set('first element', 1);
a.set('second element', 2);
a.set('third element', 3);
for (var [key, value] of a) {
console.log(key + ": " + value);
}
// Now you can also use forEach
a.forEach((value, key)=>console.log(key + ": " + value));
首先,你正在一個對象。
a['first element'] = 1;
^^^^^ -> key ^-> it's value
如果你想分配指定的元素到數組,請參閱a
陣列,它的指定index
- 例如[0]
並分配一些值,例如1
。
而關於Array#forEach
函數 - 如果你想記錄每個元素,你必須傳遞一個參數來保存數組中的每個元素。
let a = [];
a[0] = 1;
a[1] = 2;
a[2] = 3;
a.forEach(v => console.log(v))
邊注:在大多數環境中,你很可能會被一點點你'someArray.forEach(執行console.log)看看有什麼驚訝;'某些環境可能會引發錯誤(因爲使用'this'調用'log'並不是指''console')。其他人可能會工作,但向你展示你不期望的東西,例如每個循環迭代的三件事情,而不是一件。這是因爲大多數'console.log'實現會記錄它們接收到的所有**參數,而'forEach'使用三個參數調用它的回調函數:入口,其索引和數組引用。 :-) –