12

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?

0

4 Answers 4

24

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

Sign up to request clarification or add additional context in comments.

1 Comment

Maybe even shorter :D var1.map( ({ prop1, prop2 }) => ({ prop1, prop2 }) );
8

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

2 Comments

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.
Perfect, thanks! Sometimes the good old JS (or at least its newer versions) is so much more readable then lodash or other libs..
2

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

Comments

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

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.