2016-08-16 430 views
10

假設我們有對象數組。Object.assign的替代方法(... array)

調用Object.assign(...array)使得這些對象中繼承其中具有在對象具有索引i-1

索引i覆蓋現有的屬性例如對象:

var array=[{interf:'IPerson',name:'Someone'},{clss:'Person',name:'Ahmed'},{student:true}]; 
 
console.log(
 
    Object.assign(...array) // Object.assign(array[0],array[1],array[2]) 
 
)

現在,使用巴別與建議的對象傳播語法,我們可以靜態做到這一點:

{...array[0],...array[1],...array[2]} // spread used for each object not for array 

如何動態地做到這一點?

「擴展語法」的上下文有重疊。我的意思是如何在兩者中使用擴展語法:

  • 用於數組傳播元素。
  • 對於輸出文本對象{}使繼承

我試圖{...array}並將其返回{0:<array[0]>,1:<array[1]>,2:<array[2]>}這是不相同的輸出Object.assign(...array)

+3

ES7完成併發布,對象傳播不是它的一部分。只要說「提議的對象傳播語法」,不要說ES7。 – loganfsmyth

+0

作業與繼承無關。使用術語「擴展」或「混入」。 – Bergi

+0

@loganfsmyth:您認爲我們應該爲每個提案都提供一個標籤嗎? (按需創建) –

回答

20

您正在尋找

var obj = Object.assign({}, ...array) 

,創建一個新的對象,而不是突變array[0]

+0

你會碰巧有'.assign()'鋪設的IE11安全替代方案嗎?尋找現在,因爲[這](https://docs.microsoft.com/en-us/scripting/javascript/reference/object-assign-function-object-javascript)(見要求) – Nukeface

+1

不,你可以安全地在IE11中使用'Object.assign',只是[polyfill it](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Polyfill) – Bergi

+0

我剛剛結果也是這樣,謝謝 – yussan