2017-08-17 38 views
2

比方說,我有:由它自己的子元素的一個替換的對象的元素

let list = [{a: {b: 'foo'}}, {a: {b: 'bar'}}] 

我想結束了:

list = [{a: 'foo'}, {a: 'bar'}] 

這工作:

list = list.map(d => {d.a = d.a.b; return d}) 

但我有一種不好的感覺,改變價值是一個壞主意。

有沒有更清潔的方法?我的解決方案確實有效嗎?

+0

有什麼不對您的解決方案 – Shard

+0

使用的foreach而不是地圖 –

回答

1

您可以使用Array#forEach並原位更改對象,因爲當您已經改變數組的原始對象時,無需返回新數組。

let list = [{ a: { b: 'foo' } }, { a: { b: 'bar' } }]; 
 

 
list.forEach(d => d.a = d.a.b); 
 

 
console.log(list);

+0

這將是更好?爲什麼? – MasterScrat

+1

沒有建立一個新陣列,沒有重新分配。 –

+0

@MasterScrat,看看這裏的簡短比較https://stackoverflow.com/questions/354909/is-there-a-difference-between-foreach-and-map –

1

它沒有改變價值。

map方法只通過爲數組中的每個項目應用callback提供的函數創建一個新數組。

的地圖()方法創建與主叫呼叫陣列中的每個元件上的 提供的函數的結果的新的數組。

要改變原有的值,可以使用forEach方法。