JS:如何根据对象属性更改对象属性的值

Posted

技术标签:

【中文标题】JS:如何根据对象属性更改对象属性的值【英文标题】:JS : How to change the value of an object's property according to that object attribute 【发布时间】:2019-03-09 01:14:40 【问题描述】:

我有这样的 JSON 数据:

inputData = [
 id : 179849, name : alex , lastname: sanchez,
 id : 788539, name : Paul, lastname: bearer,
 id : 282169, name : Jean, lastname: nobel,
...
 id : 632785, name : Maria, lastname: parak
]

我需要根据对象的id值搜索某个对象(例如:788539)

并更改其 name 属性的值 -> name 变成 : bruno

数据会变成:

resultData= [
 id : 179849, name : alex , lastname: sanchez,
 id : 788539, name : bruno, lastname: bearer,  /* THIS ONE*/
 id : 282169, name : Jean, lastname: nobel,
...
 id : 632785, name : Maria, lastname: parak
]

过滤/映射我的数据以进行此类修改的最简单方法是什么?

【问题讨论】:

resultData.find(o => o.id === 788539).name = "bruno" Find and replace value inside an array of objects javascript的可能重复 你提到了“过滤器/映射”,而 JS 数组恰好有两个方便的方法,这些方法;) 【参考方案1】:
resultData= [
 id : 179849, name : alex , lastname: sanchez,
 id : 788539, name : bruno, lastname: bearer,  /* THIS ONE*/
 id : 282169, name : Jean, lastname: nobel,
...
 id : 632785, name : Maria, lastname: parak
];

id = 788539;

resultData.forEach(ele=>
    if(ele.id == id)
    ele.name = 'bruno'
    
);

console.log(resultData);

【讨论】:

FWIW,即使找到对象,这也会迭代整个数组。如果 ID 不是唯一的,这是必要的,但如果它是唯一的,如果列表很大,这会浪费时间。【参考方案2】:

一些替代方案,Felix Kling 提到的可能需要polyfill:

// Mentioned by Felix Kling 
inputData.find(x => x.id === 788539)
  .name = 'Bruno'

您也可以使用for of:

for (let item of inputData) 
  if (item.id === 788539) 
    item.name = 'Bruno'
    break
  

【讨论】:

以上是关于JS:如何根据对象属性更改对象属性的值的主要内容,如果未能解决你的问题,请参考以下文章

js处理一个数组中包含多个对象,根据对象的一个属性查找到这个对象

如何在js中获取session中的对象的属性值

js中向对象中添加属性的两种方法?

angularjs怎么遍历每个对象的属性的值

JS面向对象

JS面向对象