"Removing" 一个对象的多个属性没有突变

"Removing" multiple properties from an object without mutation

我正在寻找一种创建函数的方法。我可以在其中传递一个对象和一组我想要的属性(键)。该函数将为我 return 一个没有我指定的键的新对象。

function(keys: array, obj: object) {...}

问题是 - 我该如何处理多个属性?

我搜索了一下,只找到了这种解决方案:

const myObject = {
  a: 1,
  b: 2,
  c: 3
};

const { a, ...noA } = myObject;

但只有当我只想删除一把钥匙时它才有效。如果我想使用刚刚传递的数组删除多个怎么办?如何在不改变原始数组或手动创建副本的情况下做到这一点?

您可以使用 reduceObject.entries() 来完成。你可以试试这个:

const myObject = {
  a: 1,
  b: 2,
  c: 3,
  d: 4
};

const removeProps = (object, keys) => {
    return Object.entries(object).reduce((a, [key, value]) => (keys.indexOf(key) === -1 ? {...a, [key]: value}: a), {});
}

console.log(removeProps(myObject, ['b']));
console.log(removeProps(myObject, ['b', 'c']));
console.log('Original Object: ', myObject);
.as-console-wrapper{min-height: 100%!important; top: 0}

您可以通过计算不需要的属性 属性 来解构对象。

const
    without = (object, keys) => keys.reduce((o, k) => {
        const { [k]: _ , ...p } = o;
        return p;
    }, object),
    myObject = { a: 1, b: 2, c: 3 },
    keys = ['a', 'b'],
    result = without(myObject, keys);

console.log(result);

上面的答案很好,分享我的尝试:

var myObject = { a: 1, b: 2, c: 3, d: 4};
let remove=(obj, arr)=> {
  let output=[];
  for(const [key, value] of Object.entries(obj)){
  if(!arr.includes(key)){
     output.push([key,value]);
    }
  }
 return Object.fromEntries(output);
}
console.log(remove(myObject, ['a']));
console.log(remove(myObject, ['a', 'c']));