JavaScript - 内置函数删除对象中的多个键?

14 javascript

在JavaScript中,我可以删除对象的键

delete myObject[myKey];

有时,我需要删除相当多的键,但不是父键中包含我想要删除的键的所有值.

有没有一种有效的方法可以使用一行删除多个键?看起来像:

multiDelete myObject[keyOne, keyTwo, keyThree];

Jam*_*mes 37

这是一个类似于你要求的单行.

var obj = {a: 1, b: 2, c: 3, d: 4, e: 5 };

['c', 'e'].forEach(e => delete obj[e]);

// obj is now {a:1, b:2, d:4}
Run Code Online (Sandbox Code Playgroud)


小智 10

使用 lodash 库有一个简单的修复方法。

_.omit 函数获取您的对象和要删除的键数组,并返回一个新对象,其中包含原始对象的所有属性(数组中提到的属性除外)。

这是删除键的一种巧妙方法,因为使用它您可以获得一个新对象,并且原始对象保持不变。这避免了突变问题,如果我们删除原始对象中的键,则使用该对象的代码的所有其他部分可能会破坏或在代码中引入错误。

例子:

var obj = {x:1, y:2, z:3};
var result = _.omit(obj, ['x','y']);
console.log(result);

//Output
result = {z:3};
Run Code Online (Sandbox Code Playgroud)

相同文档的链接请点击此处


小智 6

您也可以使用对象解构。

const obj = {
        a: 'dog',
        b: 'cat',
        c: 'mouse',
        d: 'cow',
        e: 'horse',
    };
const {a, e, ...updatedObject} = obj;

// output
console.log(updatedObject)
Run Code Online (Sandbox Code Playgroud)

  • 该问题要求删除具有动态字段名称的键,该答案未能解决该问题的该要素。 (6认同)
  • 请注意,使用此方法您还声明了变量 a 和 e,它们分别等于“狗”和“马”。 (2认同)

Moh*_*ere 5

还没有内置的 js 函数来删除多个键,您可以使用任何库underscore.js来执行此操作。

_.omit({name: 'moe', age: 50, userid: 'moe1'}, 'userid');
=> {name: 'moe', age: 50}

//or you can use function to filter keys 

_.omit({name: 'moe', age: 50, userid: 'moe1'}, function(value, key, object){
  return _.isNumber(value);
});
=> {name: 'moe', userid: 'moe1'}
Run Code Online (Sandbox Code Playgroud)