Skip to content Skip to sidebar Skip to footer

JS ES6 Correct Way To Filter Object By Array Of Keys

I would like to take an array of objects and filter each object to only return the properties where the key matches an item in an array. For example: const myKeys = ['key_1', 'k

Solution 1:

You could map the wnated entries and builds objects with it.

const 
    keys = ['key_1', 'key_3'],
    data = [{ key_1: 'Some Value A', key_2: 'Some Other Value A', key_3: 'Some Final Value A' }, { key_1: 'Some Value B', key_2: 'Some Other Value B', key_3: 'Some Final Value B' }, { key_1: 'Some Value C', key_2: 'Some Other Value C', key_3: 'Some Final Value C' }],
    result = data.map(o => Object.fromEntries(keys.map(k => [k, o[k]])));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Solution 2:

You can simply loop over keys and build a new object which contains only those keys and respective values

const myKeys = ['key_1', 'key_3'];
const myArray = [{key_1: 'Some Value A',key_2: 'Some Other Value A',key_3: 'Some Final Value A',},{key_1: 'Some Value B',key_2: 'Some Other Value B',key_3: 'Some Final Value B',},{key_1: 'Some Value C',key_2: 'Some Other Value C',key_3: 'Some Final Value C',},];

let final = myArray.map(v => {
  return myKeys.reduce((op, key) => {
    op[key] = v[key]
    return op
  }, {})
})

console.log(final)

Solution 3:

const myKeys    = ['key_1', 'key_3'];
const myArray   = [
	{
		key_1: 'Some Value A',
		key_2: 'Some Other Value A',
		key_3: 'Some Final Value A',
	},
	{
		key_1: 'Some Value B',
		key_2: 'Some Other Value B',
		key_3: 'Some Final Value B',
	},
	{
		key_1: 'Some Value C',
		key_2: 'Some Other Value C',
		key_3: 'Some Final Value C',
	},
];

const result = myArray.map(i => Object.fromEntries(Object.entries(i).filter(([k]) => myKeys.includes(k))));

console.log(result);

Solution 4:

You can .map each object to its entries so you can .filter out any entries which don't have a key in myKeys, and then use .fromEntries() to build up your new object like so:

const myKeys = ['key_1', 'key_3'];
const myArray = [{
    key_1: 'Some Value A',
    key_2: 'Some Other Value A',
    key_3: 'Some Final Value A',
  },
  {
    key_1: 'Some Value B',
    key_2: 'Some Other Value B',
    key_3: 'Some Final Value B',
  },
  {
    key_1: 'Some Value C',
    key_2: 'Some Other Value C',
    key_3: 'Some Final Value C',
  },
];

const res = myArray.map(obj => Object.fromEntries(Object.entries(obj).filter(([k, v]) => myKeys.includes(k))));

console.log(res);

Post a Comment for "JS ES6 Correct Way To Filter Object By Array Of Keys"