删除多个对象属性?

时间:2014-07-21 12:01:41

标签: javascript oop object

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

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

我稍后再添加一些属性 -

objOpts.option4 = 'Option4'
objOpts.option5 = 'Option5'

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

目前我这样做 -

delete objOpts.option4
delete objOpts.option5

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

9 个答案:

答案 0 :(得分:24)

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

_.omit函数获取您想要删除的对象和一组键,并返回一个新对象,该对象具有原始对象的所有属性,但数组中提到的除外。

这是一种移除键的简洁方法,因为使用它可以获得一个新对象,原始对象保持不变。这避免了变异问题,如果我们删除原始对象中的密钥,那么使用该对象的代码的所有其他部分可能会破坏或引入代码中的错误。

实施例

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

//Output
result = {z:3};

相同Click Here

文档的链接

答案 1 :(得分:8)

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

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

objOpts.custom.option4 = 'Option4'
objOpts.custom.option5 = 'Option5'

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

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

如果您开始在JavaScript中删除对象,我想指出一篇关于该主题的精彩文章:http://perfectionkills.com/understanding-delete/

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

编辑:

我想添加,而不是删除和重新创建属性,你可以简单地说objOpts.custom = {},它将从内存释放option4option5(最终,通过垃圾收集)。

答案 2 :(得分:8)

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

<强> Js fiddle example

代码也在下面:

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);

答案 3 :(得分:8)

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

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

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

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

答案 4 :(得分:2)

我还提供比MaunoVänä更现代的方法:

function deleteProps (obj, prop) {
    for (let p of prop) 
        (p in obj) && (delete obj[p]);
}

示例:

// 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);

答案 5 :(得分:1)

一个可能的选择是根据您的使用情况,使用Object.assign将属性设置为nullundefined。这不会删除属性,但会清除它们。因此,您可以执行以下任一操作:

// Modify the object directly
Object.assign(objOpts, {option4: null, option5: null});

OR

// Create a copy of the object with the properties cleared 
const newObject = Object.assign({}, objOpts, {option4: null, option5: null});

您还可以使用数组列出要用Array.reduce()清除的属性,以创建Object.assign()的最后一个参数。

答案 6 :(得分:0)

var obj = {"key1":1,"key2":2,"key3":3,"key4":4};

if (!('multidelete' in Object.prototype)) {
Object.defineProperty(Object.prototype, 'multidelete', {
    value: function () {
        for (var i = 0; i < arguments.length; i++) {
            delete this[arguments[i]];
        }
    }
});
}

obj.multidelete("key1","key3");
  

您可以像这样使用它来删除对象中的多个键

答案 7 :(得分:-1)

Object.keys(object).forEach((prop) => delete object[prop]);

答案 8 :(得分:-2)

var extraOpts = {}
extraOpts.options = ['option4','option5','option6','option7','option8']
delete extraOpts.options
console.log(extraOpts.options)