2017-07-11 43 views
1

我想使用forEach迭代數組,然後將該數組的值添加到對象。使用forEach迭代數組,添加到對象並使用forEach索引的對象鍵不起作用

添加到對象時,我希望能夠使用增加的數字來命名對象鍵,就像使用i變量計數器使用正常的for loop一樣。

與下面的代碼:

var myArray = [123, 15, 187, 32]; 
var testObj = {} 
myArray.forEach(function (value, i) { 
    console.log('%d: %s', i, value); 
    var objectKeyName = "item" + i; // ⬅️ here 
    testObj.objectKeyName = value; 
}); 
console.log(testObj); 

我希望testObj

{ 
    item0: 123, 
    item1: 15, 
    item2: 187, 
    item3: 32, 
} 

而是輸出:

{objectKeyName: 32} 

這是爲什麼? 任何幫助,非常感謝!

回答

4

問題是因爲您正在使用變量作爲屬性名稱。在這種情況下,您不能使用點符號,而必須使用括號符號來訪問該對象。

當前在對象中只看到一個項目的原因是因爲您只設置了objectKeyName屬性,並在forEach的每次迭代中覆蓋它。

var myArray = [123, 15, 187, 32]; 
 
var testObj = {} 
 
myArray.forEach(function(value, i) { 
 
    var objectKeyName = "item" + i; 
 
    testObj[objectKeyName] = value; // Note the [] surrounding the variable name here 
 
}); 
 
console.log(testObj);

+0

啊啊啊我明白了。所以,如果你使用變量的括號表示法來添加/更新對象屬性值!多謝,夥計! – Ash

+1

就是這樣。很高興幫助 –

1

使用testObj[objectKeyName] = value而不是testObj.objectKeyName = value。點符號字面上指定鍵值。

+0

謝謝隊友!那很棒! :d – Ash

1

在這裏,你去與解決方案

var myArray = [123, 15, 187, 32]; 
 
var testObj = {} 
 
myArray.forEach(function(value, i) { 
 
    testObj["item" + i] = value; 
 
}); 
 
console.log(testObj);

1
var myArray = [123, 15, 187, 32]; 
var testObj = []; 
myArray.forEach(function (value, i) { 
    console.log('%d: %s', i, value); 
    var objectKeyName = "item" + i; // ⬅️ here 
    testObj.push(objectKeyName + ":" + value); 
}); 
console.log(testObj); 
testObj.forEach(function (value, i) { 
    console.log(value); 
}); 
相關問題