删除多个对象属性?

Ste*_*ano 30 javascript oop object

我创建了一个具有多个属性的对象 -

var objOpts = {
  option1: 'Option1',
  option2: 'Option2',
  option2: 'Option3'
};
Run Code Online (Sandbox Code Playgroud)

然后我再添加一些属性 -

objOpts.option4 = 'Option4'
objOpts.option5 = 'Option5'
Run Code Online (Sandbox Code Playgroud)

然后,我完成了后两个创建的属性('Option4'和'Option5'),我想清除/删除两者.

目前我这样做 -

delete objOpts.option4
delete objOpts.option5
Run Code Online (Sandbox Code Playgroud)

还有另一种方法可以做到这一点吗?想象一下,我添加了5个属性,需要清除/删除所有五行几乎相同的'删除'代码

Aks*_*pta 29

使用库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)

链接的文档相同点击这里


Ste*_*aul 16

ES6有一个优雅的解决方案:在对象解构中休息:

let { a, b, ...rest } = { a: 10, b: 20, c: 30, d: 40 };
console.log(rest); // { c: 30, d: 40 }
Run Code Online (Sandbox Code Playgroud)

请注意,这不会改变原始对象,但有些人可能仍然觉得这很有价值.

参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment

  • 非常简洁的答案。一个小缺点是 eslist 警告 a 和 b 已分配但从未使用 (2认同)

Sun*_*pta 11

我确定您正在尝试向对象添加自定义属性.

我建议的一种更简单的方法是创建一个子属性:

objOpts.custom.option4 = 'Option4'
objOpts.custom.option5 = 'Option5'
Run Code Online (Sandbox Code Playgroud)

这样你就delete objOpts.custom可以完成它.请注意,在此步骤之后,您必须重新创建objOpts.custom = {}.

此外,这种方式也会更接近OOP,因为您的公共财产很容易与私人财产区分开来.

如果您正在使用删除在JavaScript对象开始,我想指出对主题的出色撰写的文章:http://perfectionkills.com/understanding-delete/

您可以使用元属性来保护属性不被删除等(为您的案例创建更好的编码流程)

编辑:

我想补充一点,而不是删除并重新创建的属性,你可以简单地说,objOpts.custom = {}这将释放option4option5从内存中(最终,通过垃圾收集).


Mau*_*ähä 8

一种方法是创建一个单独的函数,它将您的对象和属性作为参数.

Js小提琴的例子

代码如下:

var objOpts = {
  option1: 'Option1',
  option2: 'Option2',
  option3: 'Option3',
  option4: 'Option4'
};

/** 
 * Method for removing object properties
 *
 */
var removeObjectProperties = function(obj, props) {

    for(var i = 0; i < props.length; i++) {
        if(obj.hasOwnProperty(props[i])) {
            delete obj[props[i]];
        }
    }

};

// remove
removeObjectProperties(objOpts, ["option1", "option2"]);

// objOpts - after
console.log(objOpts);
Run Code Online (Sandbox Code Playgroud)

  • 不需要检查 `obj.hasOwnProperty(props[i])` ,因为 `delete` 不需要该属性存在。 (2认同)

Sim*_*mon 6

我还将提供一种比 Mauno Vänä 更现代的方法:

function deleteProps (obj, prop) {
    for (const p of prop) {
        (p in obj) && (delete obj[p]);
    }    
}
Run Code Online (Sandbox Code Playgroud)

例子:

// Create sample object
const myObject = {
    a: 'Foo',
    b: 'Baa',
    c: 'Oof'
};

// Prints: {a: "Foo", b: "Baa", c: "Oof"}
console.log(myObject);

// Delete props
deleteProps(myObject, ['a', 'b']);

// Prints: {c: "Oof"}
console.log(myObject);
Run Code Online (Sandbox Code Playgroud)

  • 不需要检查“(p in obj)”,因为“delete”不需要该属性存在。 (3认同)