dicem
@dicem

Как отфильтровать объект по ключам?

Всем привет, имеется массив со строками:
const keys = ['addr', 'name', 'status']

Также имеется массив объектов типа:
const arr = [
  {
    addr: "vrn"
    name: null
    id: 2
    num: "1"
    status: false
  }
]


Задача стоит в том, чтобы получить массив объектов, в котором были бы свойства только с ключами из первого массива, т.е.
[
  {
    addr: "vrn"
    name: null
    status: false
  }
]


Буду рад любой помощи
  • Вопрос задан
  • 3798 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
const pick = (obj, keys) => Object.fromEntries(keys.map(k => [ k, obj[k] ]));

const newArr = arr.map(n => pick(n, keys));

Если в элементах arr присутствуют не все keys, и в элементах результирующего массива изначально отсутствующие появится не должны, тогда

const pick = (obj, keys) =>
  Object.fromEntries(Object.entries(obj).filter(m => keys.includes(m[0])));

// или

const pick = (obj, keys) =>
  keys.reduce((acc, n) => (obj.hasOwnProperty(n) && (acc[n] = obj[n]), acc), {});
Ответ написан
WblCHA
@WblCHA
По мне так тут редьюсь больше напрашивается.
arr.map((obj) => keys.reduce((acc, key) => {
    acc[key] = obj[key];
    return acc;
  }, {}));
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы