[英]How can I remove an object from an array if I know the value of one field of the 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.