为了账号安全,请及时绑定邮箱和手机立即绑定

修改对象中键的值不起作用

修改对象中键的值不起作用

慕运维8079593 2022-09-29 15:37:31
我有一个对象说requestObject: any = {    "type": 'type1',    "start": 0,    "size": 10,    "keywords": ['abcd','efgh'],    filters: [],  }然后我想修改关键字的值,所以我做了 requestObject['keywords'] =  ['pqr']但是当我为它做控制台日志时。它显示相同的值。"keywords": ['abcd','efgh'],我尝试删除密钥,然后添加具有相同密钥名称但仍然相同的更新值。delete requestObject.keywordsrequestObject['keywords'] =  ['pqr'];详细说明:我有两个同级组件,让我们说A和B(Ngb模式)。在组件 A 中,我有请求对象。现在,单击组件A中的按钮时,组件B(NgbModal)会弹出,我可以在其中更新值并点击提交。提交后,我使用事件发射器将这些值发送到组件A,并使用modalRef.componentInstance.filterApplied.subscribe((res: any) => {}并且我正在尝试更新组件 A 中的对象。但它没有更新和给出相同的旧值。
查看完整描述

2 回答

?
撒科打诨

TA贡献1934条经验 获得超2个赞

你可能会无意中碰到“不变性”。

我怀疑您的响应对象是通过HttpResponse返回的,其主体(根据文档)是只读的。

即使这不是这里的根本原因,通常最好避免直接修改对象(如服务器响应)。更好的方法是创建一个新对象并修改新对象。

请尝试以下一种或两种方法:

const requestObject: any = {

  "type": 'type1',

  "start": 0,

  "size": 10,

  "keywords": ['abcd','efgh'],

  filters: [],

}



// -----------

// solution 1:

// create a new object by spreading the old one and overwriting the 'keywords' item


const updatedRequest = {...requestObject, keywords: ['pqr'] }

console.log(updatedRequest)



// -----------

// solution 2:

// deep copy via JSON.stringify + JSON.parse


const clonedRequest = JSON.parse(JSON.stringify(requestObject))

clonedRequest.keywords = ['pqr']

console.log(clonedRequest)


查看完整回答
反对 回复 2022-09-29
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

当我在控制台中测试代码时,


{

    "type": 'type1',

    "start": 0,

    "size": 10,

    "keywords": ['abcd','efgh'],

    filters: [],

}

被赋给变量 ,而不是 。这是有道理的,就像你正在做的那样,它将=符号之后的所有内容分配给,并且不返回任何内容。另外,我不认为使用冒号进行赋值在对象定义之外有效。结果对我来说对象是未定义的。您可能希望将作业替换为anyrequestObjectany =any


requestObject = {

    "type": 'type1',

    "start": 0,

    "size": 10,

    "keywords": ['abcd','efgh'],

    filters: [],

  }


查看完整回答
反对 回复 2022-09-29
  • 2 回答
  • 0 关注
  • 56 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信