Javascript 如何从对象中删除字段
我有一个对象数组。对于执行一个操作,我需要从该对象中删除几个字段,对于其他操作,我必须使用整个字段 但这两个数组都删除了“regex”字段。我在这里犯了什么错误Javascript 如何从对象中删除字段,javascript,node.js,Javascript,Node.js,我有一个对象数组。对于执行一个操作,我需要从该对象中删除几个字段,对于其他操作,我必须使用整个字段 但这两个数组都删除了“regex”字段。我在这里犯了什么错误 var newob={}; 变量myObject={ “ircEvent”:“PRIVMSG”, “方法”:“newURI”, “regex”:“^http://.*” }; newob=JSON.stringify(myObject); 删除newob.regex; 日志(“Test1”,newob); log(“Test2”,my
var newob={};
变量myObject={
“ircEvent”:“PRIVMSG”,
“方法”:“newURI”,
“regex”:“^http://.*”
};
newob=JSON.stringify(myObject);
删除newob.regex;
日志(“Test1”,newob);
log(“Test2”,myObject)
您缺少JSON.parse
,因此可以重新创建对象。否则,您将尝试删除字符串的regex
属性,该属性不存在
newob = JSON.parse(JSON.stringify(myObject));
JSON.stringify
创建一个字符串,您需要执行JSON.parse
从JSON字符串创建一个对象
对于该对象,您可以使用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 }
可以按如下方式复制对象:
const newobj = JSON.parse(JSON.stringify(myObject));
然后对myObject
的更改不会影响newobj
还有一个问题:
newob = JSON.stringify(myObject);
这里是错误的,因为您分配了想要的对象,但JSON.stringify返回一个字符串,如果我理解正确,您希望映射输入数据并从输入数组中的每个对象中删除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)
但是,如果要从一个对象中删除密钥,则只有您可以
const myObject = {
ircEvent: 'PRIVMSG',
method: 'newURI',
regex: '^http://.*',
}
const { regex, ...noRegex } = myObject
console.log(noRegex)
谢谢。这是有效的。但是我不明白原因,请参见编辑,但基本上是JSON.stringify
创建一个string
。您需要一个对象,这就是为什么需要执行JSON.parse
。但您也可以执行Object.assign