Вывести объект со свойствами, которые совпадают с ключами массива

Должен получить на выходе следующее:

console.log(pickProps({ a: 1, b: 2, c: 3 }, ['a', 'c'])); // ==> { a: 1, c: 3 }
console.log(pickProps({ a: 1, b: 2, c: 3 }, ['a', 'c', 'd', 'hex'])); // ==> { a: 1, c: 3 }

Мне нужно в задачке использовать для перебора свойств объекта цикл for..in. Можно как-то одной строкой сравнить свойства объекта и ключи массива чтобы получить нужный объект?

const pickProps = (obj, props) => {

let resultObj = {};

    for (let key in obj) {

          resultObj = .....
    }

    return resultObj;
};

Ответы (1 шт):

Автор решения: Grundy

В данном случае задача сводится к свертке массива. Это реализуется при использовании метода .reduce

props.reduce((acc, cur)=>{
    if (cur in obj) { // если поле есть в объекте
        acc[cur] = obj[cur]; // записываем в результат
    }
    return acc;
},
{}) // начальное значение пустой массив

Точно так же можно реализовать с помощью обычного цикла

const pickProps = (obj, props) => {

  let resultObj = {};

  for (let i = 0; i < props.length; i++) {
    const cur = props[i];
    if (cur in obj) {
      resultObj[cur] = obj[cur]
    }
  }

  return resultObj;
};

console.log(pickProps({
  a: 1,
  b: 2,
  c: 3
}, ['a', 'c'])); // ==> { a: 1, c: 3 }
console.log(pickProps({
  a: 1,
  b: 2,
  c: 3
}, ['a', 'c', 'd', 'hex'])); // ==> { a: 1, c: 3 }

→ Ссылка