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)
})