给数组里面的对象添加一个新的数据

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() 。

String类型和 Symbol 类型的属性都会被拷贝。

在出现错误的情况下,例如,如果属性不可写,会引发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)
   })

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章