如何从 JavaScript 对象中删除属性?
2008-10-16
3247479
给定一个对象:
let myObject = {
"ircEvent": "PRIVMSG",
"method": "newURI",
"regex": "^http://.*"
};
如何删除属性
regex
以得到以下
myObject
?
let myObject = {
"ircEvent": "PRIVMSG",
"method": "newURI"
};
3个回答
要从对象中删除属性(改变对象),可以使用
delete
关键字来实现,如下所示:
delete myObject.regex;
// or,
delete myObject['regex'];
// or,
var prop = "regex";
delete myObject[prop];
演示
var myObject = {
"ircEvent": "PRIVMSG",
"method": "newURI",
"regex": "^http://.*"
};
delete myObject.regex;
console.log(myObject);
对于任何有兴趣阅读更多内容的人,Stack Overflow 用户
kangax
在他们的博客上撰写了一篇关于
delete
语句的极其深入的博客文章,
了解 delete
。强烈推荐。
如果您想要一个 新 对象,其中包含原始对象的所有键(除了一些键),您可以使用 destructuring 。
let myObject = {
"ircEvent": "PRIVMSG",
"method": "newURI",
"regex": "^http://.*"
};
// assign the key regex to the variable _ indicating it will be unused
const { regex: _, ...newObj } = myObject;
console.log(newObj); // has no 'regex' key
console.log(myObject); // remains unchanged
nickf
2008-10-16
JavaScript 中的对象可以看作是键和值之间的映射。
delete
运算符用于一次删除一个这些键(通常称为对象属性)。
var obj = {
myProperty: 1
}
console.log(obj.hasOwnProperty('myProperty')) // true
delete obj.myProperty
console.log(obj.hasOwnProperty('myProperty')) // false
delete
运算符不会直接释放内存,它不同于简单地将
null
或
undefined
的值分配给属性,因为属性
本身
会从对象中删除。请注意,如果已删除属性的
值
是引用类型(对象),并且程序的另一部分仍持有对该对象的引用,那么该对象当然不会被垃圾回收,直到对它的所有引用都消失为止。
delete
仅适用于描述符将其标记为可配置的属性。
Dan
2014-02-12
老问题,现代答案。使用对象解构( ECMAScript 6 功能),它很简单:
const { a, ...rest } = { a: 1, b: 2, c: 3 };
或者使用问题示例:
const myObject = {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"};
const { regex, ...newObject } = myObject;
console.log(newObject);
编辑:
要重新分配给同一个变量,请使用
let
:
let myObject = {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"};
({ regex, ...myObject } = myObject);
console.log(myObject);
Koen.
2016-11-08