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