How to filter an object with its values ​​in ES6

What is the best way to filter an object this way in ES6?

Initial data:

const acceptedValues = ["value1","value3"] const myObject = { prop1:"value1", prop2:"value2", prop3:"value3" } 

Expected Result:

 filteredObject = { prop1:"value1", prop3:"value3" } 
+5
source share
5 answers

You can use reduce() to create a new object and includes() to check if the value of the object exists in the array.

 const acceptedValues = ["value1", "value3"] const myObject = { prop1: "value1", prop2: "value2", prop3: "value3" } var filteredObject = Object.keys(myObject).reduce(function(r, e) { if (acceptedValues.includes(myObject[e])) r[e] = myObject[e] return r; }, {}) console.log(filteredObject) 
+9
source

Just to build a good answer on top of @Nenad Vracar, you could use an object instead of Array with includes for a quick search:

 const acceptedValues = ["value1", "value3"]; const myObject = { prop1: "value1", prop2: "value2", prop3: "value3" }; const lookup = acceptedValues.reduce( (memo, prop) => { memo[prop] = true; return memo; }); const filteredObject = Object.keys(myObject).reduce((filtered, key) => { if(lookup[myObject[key]]){ filtered[key] = myObject[key]; } return filtered; }, {}); console.log(filteredObject); 

Also, that includes does not do this work, but I decided to provide an alternative view.

+2
source

Why not a simple loop?

 const acceptedValues = ["value1","value3"] const myObject = { prop1:"value1", prop2:"value2", prop3:"value3" }; var filteredObject = {}; for(e in myObject) { if (myObject.hasOwnProperty(e)) { if (acceptedValues.indexOf(myObject[e]) != -1) { filteredObject[e] = myObject[e]; } } } console.log(filteredObject); 
+1
source

Using a simple for loop and obtaining an object by key.

 const acceptedValues = ["value1","value3"] const myObject = { prop1:"value1", prop2:"value2", prop3:"value3" } Object.prototype.getKeyByValue = function( value ) { for( var prop in this ) { if( this.hasOwnProperty( prop ) ) { if( this[ prop ] === value ) return prop; } } } for (var i in acceptedValues) { if (myObject.getKeyByValue(acceptedValues[i])){ console.log(acceptedValues[i]); } } 
0
source
 function filter(myObject){ var obj=Object.assign({},myObject); Object.keys(obj).forEach(function(key) { if(acceptedValues.indexOf(obj[key])<0) delete obj[key]; }); return obj; } const filteredObject=filter(myObject); 
0
source

All Articles