删除多个对象属性

Delete multiple object properties?

本文关键字:属性 对象 删除      更新时间:2023-09-26

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

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

我稍后会添加更多属性-

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

然后我完成了后两个创建的属性("Option4"answers"Option5"(,我想清除/删除这两个属性。

目前我会这样做-

delete objOpts.option4
delete objOpts.option5

还有别的办法吗?想象一下,我又添加了5个属性,需要清除/删除它们——所有这些都是五行几乎相同的"删除"代码

ES6提供了一个优雅的解决方案:Rest in Object Destructuring:

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

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

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

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

示例

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

同一点击此处的文档链接

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

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

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

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

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

如果你刚开始用JavaScript删除对象,我想指出一篇关于这个主题的优秀文章:http://perfectionkills.com/understanding-delete/

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

编辑:

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

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

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

比Mauno Vänä更现代的方法:

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

示例:

// Create sample object
const myObject = {
    a: 'Foo',
    b: 'Baa',
    c: 'Baz'
};
// Prints: {a: "Foo", b: "Baa", c: "Baz"}
console.log(myObject);
// Delete props
deleteProps(myObject, ['a', 'b']);
// Prints: {c: "Baz"}
console.log(myObject);
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");

你可以这样使用它来删除对象中的多个密钥

一个可选的选项是使用Object.assign将属性设置为nullundefined,具体取决于您的用例。这不会删除属性,但会清除它们。所以你可以做以下任一项:

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

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

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

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