繁体   English   中英

如何从 object 中删除字段

[英]How can i remove a field from an object

我有一个 object 数组。 为了进行一项操作,我需要从此 object 中删除几个字段,而对于其他一些操作,我必须使用整个字段

但是这两个数组都删除了“正则表达式”字段。 我在这里做错了什么?

 var newob = {}; var myObject = { "ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*" }; newob = JSON.stringify(myObject); delete newob.regex; console.log("Test1", newob); console.log("Test2", myObject);

您缺少JSON.parse因此您可以创建 object 回来。 否则,您将尝试delete不存在的string的属性regex

newob = JSON.parse(JSON.stringify(myObject));

JSON.stringify创建一个字符串,您需要执行JSON.parse从 Z0ECD111C1D7A2D87A20 字符串创建一个 object。

对于 object,您可以使用Object.assign({}, myObject)因为它是一个浅克隆。

newob = Object.assign({}, myObject);
// newobj = { ...myObject } // this will also work

问题是newObj不是myObject的副本,而是对它的引用。 因此,当您删除myObject的字段时,您还会看到newObj的变化

为了解释我所说的,请看这个片段:

> const a = {a: 1}
undefined
> b = a
{ a: 1 }
> a.c = 58
58
> b
{ a: 1, c: 58 }

您可以像这样复制 object:

const newobj = JSON.parse(JSON.stringify(myObject));

那么myObject上的更改不会影响newobj

还有一个问题:

newob = JSON.stringify(myObject); 

在这里是错误的,因为你指定你想要一个 object 但 JSON.stringify 返回一个字符串

如果我理解正确,您希望 map 输入数据并从输入数组中的每个对象中删除regex

const items = [
    {
        ircEvent: 'PRIVMSG',
        method: 'newURI',
        regex: '^http://.*',
    },
    {
        ircEvent: 'TEST',
        method: 'newURI',
        regex: '^http://.*',
    },
]

const newItems = items.map(({ regex, ...item }) => item)

解释上面发生的事情的一个好方法是

const newArray = array.map(({dropAttr1, ...keepAttrs}) => keepAttrs)

但是如果您想从一个 object 中删除密钥,只有您可以

const myObject = {
    ircEvent: 'PRIVMSG',
    method: 'newURI',
    regex: '^http://.*',
}

const { regex, ...noRegex } = myObject

console.log(noRegex)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM