Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从对象中删除字段_Javascript_Node.js - Fatal编程技术网

Javascript 如何从对象中删除字段

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

我有一个对象数组。对于执行一个操作,我需要从该对象中删除几个字段,对于其他操作,我必须使用整个字段

但这两个数组都删除了“regex”字段。我在这里犯了什么错误

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