Оставить в объектах массива ключи согласно списку

Всем привет! Хочу создать новый массив объектов без поля gender. В чем ошибка?

let collections = [
          { name: "Tom", gender: "male", age: 12 },
          { name: "Becky", gender: "female", age: 11 },
          { name: "Huck", gender: "male", age: 13 }
        ];
        let newCollections = collections.slice();
        let operations = {
          select: function () {
            let args = [].slice.call(arguments);
            for (let i = 0; i < newCollections.length; i++) {
              for (let key in newCollections[i]) {
                for (let j = 0; j < args.length; j++) {
                  if (key !== args[j]) {
                    delete key;
                    return newCollections;
                  }
                }
              }
            }
          }
        };
        
       operations.select("name", "age"); //список полей, который нужно оставить

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

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

В общем, у тебя let newCollections = collections.slice(); ничего с массивом не делает. delete key; так же ничего не удаляет и на первой итерации в for (let i = 0; i < newCollections.length; i++) {, ты выходишь из функции возвращая return newCollections;

let collections = [{
    name: "Tom",
    gender: "male",
    age: 12
  },
  {
    name: "Becky",
    gender: "female",
    age: 11
  },
  {
    name: "Huck",
    gender: "male",
    age: 13
  }
];
let operations = {
  select: function() {
    let args = [].slice.call(arguments)
    for(var i = 0; i < collections.length; i++) {
      for(var key in collections[i]){
        if(!args.includes(key)){
          delete collections[i][key]
        }
      }
    }
   return collections
  }
};

console.log(operations.select("name", "age")); //список полей, который нужно оставить

→ Ссылка