JavaScript хранит определенные свойства для объектов в массиве - PullRequest
0 голосов
/ 06 мая 2018

Я хочу удалить каждый атрибут из объектов в массиве, за исключением некоторых из них:

var listToKeep = ['name', 'school'];

var arrayOfObjects = [{id:'abc',name:'oh', school: 'a', sport: 'a'},
                      {id:'efg',name:'em', school: 'b', sport: 's'},
                      {id:'hij',name:'ge', school: 'c', sport: 'n'}]

Я пытаюсь с этим, но это только пытается удалить один:

arrayOfObjects .forEach(function(v){ delete v.id});

ожидаемый результат будет:

var arrayOfObjects = [{name:'oh', school: 'a'},
                          {name:'em', school: 'b'},
                          {name:'ge', school: 'c'}]

я не хочу использовать for loop.

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Вы можете зациклить ключи каждого объекта JSON в массиве arrayOfObjects, а затем, если ключ не найден в массиве listToKeep, затем удалить этот key:value из объекта. А так как вы хотите изменить существующий arrayOfObjects, вы можете использовать этот подход для использования delete в свойстве объекта.

var listToKeep = ['name', 'school'];

var arrayOfObjects = [{id:'abc',name:'oh', school: 'a', sport: 'a'},
                      {id:'efg',name:'em', school: 'b', sport: 's'},
                      {id:'hij',name:'ge', school: 'c', sport:'n'}];
arrayOfObjects.forEach((obj)=>{
  Object.keys(obj).forEach((key)=>{
     if(listToKeep.indexOf(key) === -1){
       delete obj[key];
     }
  });
});
console.log(arrayOfObjects);
                      
0 голосов
/ 06 мая 2018

Вы можете сопоставить каждый элемент в вашем массиве с новым, созданным путем сокращения списка ключей для сохранения:

const newArray = arrayOfObjects.map(obj => listToKeep.reduce((newObj, key) => {
  newObj[key] = obj[key]
  return newObj
}, {}))

Если вы хотите изменить исходные объекты и удалить свойства, вы можете использовать два цикла forEach и оператор delete:

arrayOfObjects.forEach(obj => listToKeep.forEach((key) => {
  delete obj[key]
}, {}))

Если вы можете использовать lodash или подобную библиотеку, вы можете выбрать свойства объекта, например ::

const newArray = arrayOfObjects.map(obj => _.pick(obj, listToKeep))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...