11

I am trying to remove a property from an object array.

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 = 

I would like var2 contain something like this.

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

Is there a way to convert/cast var1 into the above? In other words, I would like to remove prop2 from var1 object array and assign it to var2. How can I do that?

peterh
  • 11,875
  • 18
  • 85
  • 108
Shawn
  • 5,130
  • 13
  • 66
  • 109

4 Answers4

22

This seems like a great time to use .map()

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

Short, sweet, and does what you want.

MDN docs for .map()

Paarth
  • 9,687
  • 4
  • 27
  • 36
9

You can delete object property like this e.g.

    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);
Ikhtiyor
  • 819
  • 6
  • 8
  • 7
    That’s not where you would use `filter`. You’d use filter to remove or keep _items in an array_, not properties. `delete`, here, creates side-effects. This answer is using `filter` in a completely unsemantic way as a general-purpose iteration method. – Sebastian Simon Feb 23 '18 at 02:14
  • Perfect, thanks! Sometimes the good old JS (or at least its newer versions) is so much more readable then lodash or other libs.. – DurkoMatko Nov 09 '19 at 15:04
1

Casting in TypeScript won't remove the property but only hide it in your IDE because it will be compile to JavaScript for runtime.

First of all, if you don't want to remove prop2 from var1 while deleting the property from var2 you need to clone it. For that you will need this JavaScript function:

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

Use the clone function to clone var1 and loop each object in var2 to remove property prop2. You can do so with JavaScript by combining array.forEach and delete:

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

Doing so will KEEP prop2 in var1 but REMOVE it from var2

j3ff
  • 5,719
  • 8
  • 38
  • 51
0

// 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);
  
arul prince
  • 303
  • 1
  • 7