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

  • Post author:
  • Post category:其他


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



版权声明:本文为weixin_42283981原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。