我想更改每個循環中的當前對象,但它不起作用,爲什麼它不起作用,我該怎麼做?Js在每個循環中更改數組內的對象
var arr = [{num: 1}, {num: 2}];
arr.forEach(function(item) {
item = {somethingElse: 1}
});
console.log(arr);
我想更改每個循環中的當前對象,但它不起作用,爲什麼它不起作用,我該怎麼做?Js在每個循環中更改數組內的對象
var arr = [{num: 1}, {num: 2}];
arr.forEach(function(item) {
item = {somethingElse: 1}
});
console.log(arr);
它不工作,因爲你正在做的是更新你給出的參數(item
),不具有對數組的實時連接的值。只要您的回調返回,該更改就會消失。
最合適的方式做到這一點是使用map
:
var arr = [{num: 1}, {num: 2}];
arr = arr.map(function(item) {
return {somethingElse: 1};
});
console.log(arr);
map
給你的函數的每個項目,並建立一個新陣列從任何你回來。
如果您更新就地陣列,而不是建立一個新的這一點很重要,你可以使用forEach
,你只需要分配回你在更新數組元素。第二個參數forEach
的回調是你所訪問的指數,所以:
var arr = [{num: 1}, {num: 2}];
arr.forEach(function(item, index) {
arr[index] = {somethingElse: 1};
});
console.log(arr);
當然,在這兩種情況下上面,你會真正使用item
的東西,你不是活得t在您的示例代碼中...如果您想要在item
上添加/刪除屬性,請不要完全替換該對象,Cyril's answer會向您顯示如何執行此操作。
@epascarello:謝謝,修正。 –
您正在更改回調函數中的本地參考item
。
要改變數組的內容,你需要使用數組索引和分配新的參考吧,如下圖所示
arr.forEach(function(item, i) {
arr[i] = {somethingElse: 1} //using index, change the reference in array
});
你是不是在對象上工作,所以更改不會轉移。
你可以這樣做,而不是:
arr.forEach(function(item, ind, array) {
array[ind] = {somethingElse: 1}
});
另一個品種答案
var arr = [{num: 1}, {num: 2}];
arr.forEach(function(item) {
item.something = 2;//setting the value
delete item.num;//deleting the num from the object
});
是的,這是另一種可能性:突變對象。 –
我相信你的意思是映射列表? 'arr.map(function(item){return {somethingElse:1}});' – Ziki