开发者问题收集

如何从 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 运算符不会直接释放内存,它不同于简单地将 nullundefined 的值分配给属性,因为属性 本身 会从对象中删除。请注意,如果已删除属性的 是引用类型(对象),并且程序的另一部分仍持有对该对象的引用,那么该对象当然不会被垃圾回收,直到对它的所有引用都消失为止。

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

你可以在 Babel 试用编辑器中看到它的实际运行情况。


编辑:

要重新分配给同一个变量,请使用 let

let myObject = {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"};
({ regex, ...myObject } = myObject);
console.log(myObject);
Koen.
2016-11-08