Как из объекта получить объекты только с необходимыми ключами и значениями. JS

К примеру есть объект с объектами:

obj: {
  obj1: {
    key1: 1,
    key2: 2,
    key3: 3,
  },
  obj2: {
    key1: 1,
    key2: 2,
    key3: 3,
  },
  obj3: {
    key1: 1,
    key2: 2,
    key3: 3,
  }
}

Мне нужно вывести те же объекты, но без некоторых ключей

obj: {
  obj1: {
    key1: 1,
    key2: 2,
  },
  obj2: {
    key1: 1,
    key2: 2,
  },
  obj3: {
    key1: 1,
    key2: 2,
  }
} 

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

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

Один из вариантов в функциональном стиле:

const obj = {
  obj1: {
    key1: 1,
    key2: 2,
    key3: 3,
  },
  obj2: {
    key1: 1,
    key2: 2,
    key3: 3,
  },
  obj3: {
    key1: 1,
    key2: 2,
    key3: 3,
  }
};
const keysToFilterOut = ['key3'];

const filteredObj = Object.fromEntries(
  Object.entries(obj).map(
    ([key, value]) => [key, Object.fromEntries(
      Object.entries(value).filter(
        ([subkey]) => !keysToFilterOut.includes(subkey)
      )
    )]
  )
);

console.log(filteredObj);

Или в процедурном стиле:

const obj = {
  obj1: {
    key1: 1,
    key2: 2,
    key3: 3,
  },
  obj2: {
    key1: 1,
    key2: 2,
    key3: 3,
  },
  obj3: {
    key1: 1,
    key2: 2,
    key3: 3,
  }
};
const keysToFilterOut = ['key3'];

const filteredObj = {};

for (const [key, value] of Object.entries(obj)) {
  filteredObj[key] = {};
  for (const [subkey, subvalue] of Object.entries(value)) {
    if (!keysToFilterOut.includes(subkey)) {
      filteredObj[key][subkey] = subvalue;
    }
  }
}

console.log(filteredObj);

→ Ссылка