1

I have an array object same like below and I want to get the result only 3 keys id, token and name:

[
 {
  id:1,
  token: 'xyz',
  name: 'john',
  _v: 2,
  _isActived: true,
  _isBlocked: false,
  ...
 },
 {
  id: 2,
  token: 'abc',
  name: 'thomas',
  _v: 2,
  _isActived: true,
  _isBlocked: false,
  ...
 },
 ...
]

My desired result:

[
 {
  id:1,
  token: 'xyz',
  name: 'john'
 },
 {
  id:2,
  token: 'abc',
  name: 'thomas'
 },
 ...
]

Who can help me please!

Anna
  • 228
  • 1
  • 3
  • 13

2 Answers2

5

Array.map will do the trick.

I have made use of object destructuring as well.

const data = [
 { id:1, token: 'xyz', name: 'john', _v: 2, _isActived: true, _isBlocked: false },
 { id: 2, token: 'abc', name: 'thomas', _v: 2, _isActived: true, _isBlocked: false },
];
const output = data.map(({id, name, token}) => ({id, name, token}));
console.log(output);

If you have a list of allowed keys. You can incoperate this in the map function. Just loop through this array inside the map and add this to an object.

Working Fiddle

const data = [
 { id:1, token: 'xyz', name: 'john', _v: 2, _isActived: true, _isBlocked: false },
 { id: 2, token: 'abc', name: 'thomas', _v: 2, _isActived: true, _isBlocked: false },
];
const list_keys_allowed = ['id', 'token', 'name'];
const output = data.map((node) => {
    const newObj = {};
    list_keys_allowed.forEach(key => newObj[key] = node[key])
    return newObj;
});
console.log(output);

The above statements will create a new array from existing.

If you want to update original array, you could follow the below logic.

Logic

  • Loop through the array.
  • Access the nodes from object.
  • Loop through the remaining keys and delete them from the objects in the array.

Working Fiddle

const data = [
    { id: 1, token: 'xyz', name: 'john', _v: 2, _isActived: true, _isBlocked: false },
    { id: 2, token: 'abc', name: 'thomas', _v: 2, _isActived: true, _isBlocked: false },
];
data.forEach((data) => {
    const { id, name, token, ...restNodes } = data; // ...restNodes will collect all keys except id, name and token
    Object.keys(restNodes).forEach((key) => delete data[key]);
});
console.log(data);
Nitheesh
  • 19,238
  • 3
  • 22
  • 49
  • can you give me an example Array.map() with keys matching from list declared? Ex: const list_keys_allow = ['id', 'token', 'name'] – Anna Oct 18 '21 at 15:16
  • @Anna Sorry, I couldnt understand. Can you elaborate what you are looking for? – Nitheesh Oct 18 '21 at 15:20
  • Ex: const list_keys_allowed = ['id', 'token', 'name']; // [ { id:1, token: 'xyz', name: 'john' }] const list_keys_allowed = ['id', '_v', '_isBlocked']; // [ { id: 1, _v: 2, _isBlocked: false } ] – Anna Oct 18 '21 at 15:25
  • @Anna updated the answer, please check – Nitheesh Oct 18 '21 at 15:44
  • 1
    Thank you so much! Your answer helps for me learn a lot. Thank you once again! – Anna Oct 18 '21 at 15:56
1

You can use this

const newArray = myArray.map(object => ({object.id, object.token, object.name}))

Haroun Darjaj
  • 274
  • 1
  • 6