【问题标题】:How to remove properties from an object array? [duplicate]如何从对象数组中删除属性? [复制]
【发布时间】:2016-09-10 09:52:01
【问题描述】:

我正在尝试从对象数组中删除一个属性。

export class class1 {
  prop1: string;
  prop2: string;
  prop3: string;
}
export class class2 {
  myprop = [
    { prop1:'A', prop2:"1", prop3:"descr1" },
    { prop1:'B', prop2:"2", prop3:"descr2" },
    { prop1:'C', prop2:"3", prop3:"descr3" },
  ];
  get(): class1[] {
    return this.myprop ;
  }
  add(value: class1): void {
    this.myprop.push(value);
  }
}
var var1 = class2.get();
var var2 = 

我希望 var2 包含这样的内容。

  [
    { prop1:'A', prop3:"descr1" },
    { prop1:'B', prop3:"descr2" },
    { prop1:'C', prop3:"descr3" },
  ];

有没有办法将var1 转换/转换为上述内容?换句话说,我想从var1 对象数组中删除prop2 并将其分配给var2。我该怎么做?

【问题讨论】:

    标签: javascript typescript


    【解决方案1】:

    这似乎是使用.map()的好时机

    var var1 = class2.get();
    var var2 = var1.map(obj => ({prop1: obj.prop1, prop3: obj.prop3}));
    

    短小精悍,随心所欲。

    MDN docs for .map()

    【讨论】:

    • 也许更短 :D var1.map( ({ prop1, prop2 }) => ({ prop1, prop2 }) );
    【解决方案2】:

    您可以像这样删除对象属性,例如

        var myprop = [
            {prop1: 'A', prop2: "1", prop3: "descr1"},
            {prop1: 'B', prop2: "2", prop3: "descr2"},
            {prop1: 'C', prop2: "3", prop3: "descr3"},
        ];
    
        myprop = myprop.filter(function (props) {
            delete props.prop2;
            return true;
        });
        console.log(myprop);
    

    【讨论】:

    • 这不是你会使用filter的地方。您将使用过滤器来删除或保留 数组中的项目,而不是属性。 delete 在这里会产生副作用。这个答案是以完全无语义的方式使用filter 作为通用迭代方法。
    • 完美,谢谢!有时好的旧 JS(或至少它的新版本)比 lodash 或其他库更具可读性..
    【解决方案3】:

    TypeScript 中的强制转换不会删除该属性,而只会将其隐藏在您的 IDE 中,因为它将被编译为 JavaScript 以供运行时使用。

    首先,如果您不想从var1 中删除prop2 同时从var2 中删除属性,则需要克隆它。为此,您将需要这个 JavaScript 函数:

    function cloneObject(obj) {
        if (obj === null || typeof obj !== 'object') {
            return obj;
        }
    
        var temp = obj.constructor(); // give temp the original obj's constructor
        for (var key in obj) {
            temp[key] = cloneObject(obj[key]);
        }
    
        return temp;
    }
    

    使用克隆函数克隆var1并循环var2中的每个对象以删除属性prop2。你可以通过结合 array.forEach 和 delete 来使用 JavaScript:

    var var2 = cloneObject(var1);
    var2.forEach((obj) => { delete obj.prop2; });
    

    这样做会将prop2 保留在var1 中,但将其从var2 中删除

    【讨论】:

      【解决方案4】:

      // Use delete:
      
          var user = {
            firstname:"Jack",
            lastname:"Prince",
          };
      
          var result = delete user.firstname;
          console.log(result,"firstname deleted");
          console.log(user);
          
          
          
        //using Object rest spread operator 
      
         const { firstname, ...data } = user;
         console.log(data);
        

      【讨论】:

        猜你喜欢
        • 2021-06-18
        • 2019-12-12
        • 1970-01-01
        • 2018-06-30
        • 2021-02-24
        • 2021-01-30
        • 2018-07-01
        • 2021-09-29
        • 1970-01-01
        相关资源
        最近更新 更多