删除多个对象属性
Delete multiple object properties?
我创建了一个具有多个属性的对象-
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 = {}
,而不是删除和重新创建属性,它将从内存中释放option4
和option5
(最终,通过垃圾回收(。
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
将属性设置为null
或undefined
,具体取决于您的用例。这不会删除属性,但会清除它们。所以你可以做以下任一项:
// 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]);
- 为什么我可以在Array属性对象中找到Javascript Array for Each方法
- 使用onclick调用属性对象函数
- 嵌套为..in 循环,列出多维对象的属性(对象)
- 动态属性对象 - JSON
- 在不使用隔离范围angularjs自定义指令的情况下获取属性对象
- 通过属性传递属性/对象.Javascript
- Javascript:属性/对象的类型
- 访问JSON中的属性(对象)
- 属性对象Javascript不是用Jquery Deferred设置的
- 无法读取属性'#<对象>'未定义的获取错误
- Twitter中多属性对象的子字符串匹配
- 无法设置'data'属性'对象'标记.(只IE8)
- 更新数据属性对象属性值
- 将属性对象的选定对象从原型推入数组
- 将单个属性对象字面量的数组转换为仅包含其值的数组的最佳方法
- 寻找一种更简单的方法来检查是否多个属性&对象中的方法是未定义的
- 主干模型:带有get方法的空属性,但在属性对象中
- 如何赋值给"text"someText"属性对象在动能js
- Angularjs的数据绑定与数据属性对象
- 如何将一个嵌套的javascript对象转换为只有一级属性对象