Miomir Dancevic
Miomir Dancevic

Reputation: 6852

Angular 7, create new object with some values from object

I have object like this

const Obj =
"Value1": {
    "value1value": "1"
},
"Value2": {
    "value2value": "2"
},
"Value3": {
    "value3value": "3"
},
"BTest": {
    "1": "1",
    "2": "2"
},
"Value4": {
    "value4value": "value4value"
},
"ATest": {
    "1": "1",
    "2": "2"
},
"Value5": {
    "value5value": "value5value",
    "value6value": "value6value"
},
"TestA": {
    "1": "1",
    "2": "2"
};

What i need is to create new object that will look like this

cont newObject = 
    "Value1": {
        "value1value": "1"
    },
    "Value2": {
        "value2value": "2"
    },
    "Value3": {
        "value3value": "3"
    },
    "Value4": {
        "value4value": "value4value"
    },
    "Value5": {
        "value5value": "value5value",
        "value6value": "value6value"
    };

Some values are removed, i have tried with like

const newObject = Obj.map(o => {
          return {  };
        });

But i had no luck, does somebody knows what has to be done, thanks in advance

Upvotes: 2

Views: 1311

Answers (3)

Yosvel Quintero
Yosvel Quintero

Reputation: 19090

You can use Object.assign() and Spread syntax combined with Object.keys(), Array.prototype.filter(), Array.prototype.map() and String.prototype.startsWith():

const Obj = {"Value1": {"value1value": "1"},"Value2": {"value2value": "2"},"Value3": {"value3value": "3"},"BTest": {"1": "1","2": "2"},"Value4": {"value4value": "value4value"},"ATest": {"1": "1","2": "2"},"Value5": {"value5value": "value5value","value6value": "value6value"},"TestA": {"1": "1","2": "2"}};
const result = Object.assign(
  {},
  ...Object.keys(Obj)
    .filter(k => k.startsWith('Value'))
    .map(k => ({ [k]: Obj[k] }))
);

console.log(result);

Upvotes: 1

Azzam Asghar
Azzam Asghar

Reputation: 346

If you do not want to use startwith etc and want to use full names how about this, You create an array with the names that you want to remove and than simply check add keys that are not in that array to new object. Something like this

const removeableItems = ["TestA", "BTest", "ATest"]
let newObj = {}
for (var key in obj) {
   if (obj.hasOwnProperty(key) && !removeableItems.includes(key)) {
      newObj[key] = obj[key];
   }
}

Here is a blitz showing this.

Upvotes: 1

jitender
jitender

Reputation: 10429

Looks like you want to extract keys which starts with specific value so you can do something like

var obj={"Value1": {
    "value1value": "1"
},
"Value2": {
    "value2value": "2"
},
"Value3": {
    "value3value": "3"
},
"BTest": {
    "1": "1",
    "2": "2"
},
"Value4": {
    "value4value": "value4value"
},
"ATest": {
    "1": "1",
    "2": "2"
},
"Value5": {
    "value5value": "value5value",
    "value6value": "value6value"
},
"TestA": {
    "1": "1",
    "2": "2"
}}

let newObj={};

Object.keys(obj).forEach(k=>{
if(k.startsWith('Value')){
newObj[k]=obj[k];
}
})
console.log(newObj)

Upvotes: 1

Related Questions