Ключ фильтра из списка объектов - PullRequest
2 голосов
/ 12 апреля 2019

Как я могу отфильтровать каждый ключ из списка объектов в ES6? Учитывая этот оригинал (их может быть много в этом списке):

[{"x": 0, 
 "y": 0, 
 "width": 10, 
 "frame_variables": [{"lookup_type": null,"lookup_id": null}]
}]

Я хочу вернуть это:

[{"x": 0, 
 "y": 0, 
 "width": 10
}]

Я думаю кое-что перечислить, но я не уверен в синтаксисе:

displayFrames: function () {
  return this.frames.filter(e => e.key !== 'frame_variables')
}

Есть идеи?

Ответы [ 3 ]

3 голосов
/ 12 апреля 2019

let array = [{"x": 0, 
 "y": 0, 
 "width": 10, 
 "frame_variables": [{"lookup_type": null,"lookup_id": null}]
}];

let result = array.map(({ frame_variables, ...rest }) => ({ ...rest }));

console.log(result);

вам нужно использовать функцию map для преобразования всех ваших элементов из вашего массива.С помощью destructuring вы можете отделить ключ frame_variables от остальной части объекта, поэтому вы просто возвращаете новый объект без этого ключа.

2 голосов
/ 12 апреля 2019

Что-то вроде этого должно сделать это:

let data = {
  "x": 0,
  "y": 0,
  "width": 10,
  "frame_variables": [{
    "lookup_type": null,
    "lookup_id": null
  }]
};

const filterAttribute = (obj, keyToFilterOut) => (Object.keys(obj)).reduce((filteredObj, key) => {
  if (keyToFilterOut !== key) {
    filteredObj[key] = obj[key]
  }
  return filteredObj;
}, {});

console.log(filterAttribute(data, 'frame_variables'))

Мое решение также не изменяет исходный объект, вместо этого я решил создать новый полностью - отлично, если вы хотите сохранить данные по другим причинам

2 голосов
/ 12 апреля 2019

Фильтрация предназначена для удаления целых элементов из массива.Вы можете просто перебрать массив и вызвать delete для каждого.

for (var i = 0, len = array.length; i < len; i++) {
    delete array[i].frame_variables;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...