ES6寫法
data.data.forEach((item,index) => {
console.log(item.excerpt.length)
let excerpt3 = {excerpt2:''};
let newObj
if(item.excerpt.length > 120){
excerpt3.excerpt2 = item.excerpt.slice(0,120);
newObj = Object.assign(item,excerpt3);
// this.DataList[index].excerpt2 = excerpt2;
console.log(newObj)
this.DataList.push(newObj);
}
});
如果目標對象中的屬性具有相同的鍵,則屬性將被源中的屬性覆蓋。後來的源的屬性將類似地覆蓋早先的屬性。
Object.assign
方法只會拷貝源對象自身的並且可枚舉的屬性到目標對象。該方法使用源對象的[[Get]]
和目標對象的[[Set]]
,所以它會調用相關 getter 和 setter。因此,它分配屬性,而不僅僅是複製或定義新的屬性。如果合併源包含getter,這可能使其不適合將新屬性合併到原型中。爲了將屬性定義(包括其可枚舉性)複製到原型,應使用Object.getOwnPropertyDescriptor()
和Object.defineProperty()
。
在出現錯誤的情況下,例如,如果屬性不可寫,會引發TypeError
,如果在引發錯誤之前添加了任何屬性,則可以更改target
對象。
注意,Object.assign
會跳過那些值爲 null
或 undefined
的源對象。
深拷貝問題
針對深拷貝,需要使用其他方法,因爲 Object.assign()
拷貝的是屬性值。假如源對象的屬性值是一個指向對象的引用,它也只拷貝那個引用值。
利用新建數組給原數組添加數據
data.data.forEach((item,index) => {
let DataList2 = {excerpt2:''};
DataList2 = item;
DataList2.excerpt2 =item.excerpt.slice(0,120);
this.DataList.push(DataList2);
console.log(DataList2)
})