首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何更新作为数组的对象属性?

如何更新作为数组的对象属性?
EN

Stack Overflow用户
提问于 2018-07-30 14:16:34
回答 3查看 675关注 0票数 1

我在一个ReactJS项目中工作,在我的状态中有一个filterGroupsData属性。这是一个对象数组,每个对象都有一个filters属性,它是一个字符串值数组。见下文:

代码语言:javascript
复制
filterGroupsData:[
    {"key":1532957059388,"id":1532957059388,"filters":[]},        
    {"key":1532957059612,"id":1532957059612,"filters":[]},        
    {"key":1532957059847,"id":1532957059847,"filters":[]}
]

如何将元素添加到具有给定id的对象的filters属性中?

我尝试过这样做,但是这样做的结果是用on值覆盖整个对象:

代码语言:javascript
复制
// update the filter array of the object with id == activeId
let updatedFilterGroupsData = filterGroupsData.map(filterGroupData => filterGroupData.id === activeId ? filterGroupData.filters.push('test') : filterGroupData)

this.setState({filterGroupsData: updatedFilterGroupsData});

感谢你的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-30 14:22:16

可以使用findIndex获取要更新的筛选器组的索引,然后创建对象和filters数组的副本并向其添加一个新条目。

示例

代码语言:javascript
复制
const id = 1532957059388;

this.setState(previousState => {
  const filterGroupsData = [...previousState.filterGroupsData];
  const index = filterGroupsData.findIndex(group => group.id === id);

  filterGroupsData[index] = {
    ...filterGroupsData[index],
    filters: [...filterGroupsData[index].filters, "new filter"]
  };

  return { filterGroupsData };
});
票数 0
EN

Stack Overflow用户

发布于 2018-07-30 14:19:06

这里:filterGroupData.filters = 'test'

您正在将支柱值设置为字符串,而不是放在数组中。

您需要将项pushfilters数组中,如下所示:

filterGroupData.filters.push('test');

票数 0
EN

Stack Overflow用户

发布于 2018-07-30 14:20:41

filters是一个数组,因此您需要在map中使用多行代码的push('test')

代码语言:javascript
复制
var filterGroupsData = [
    {"key":1532957059388,"id":1532957059388,"filters":[]},        
    {"key":1532957059612,"id":1532957059612,"filters":[]},        
    {"key":1532957059847,"id":1532957059847,"filters":[]}
]
var activeId = 1532957059612;
let updatedFilterGroupsData = filterGroupsData.map((filterGroupData) => {
  if(filterGroupData.id === activeId) {
      filterGroupData.filters.push('test');
  }
  return filterGroupData 
});
console.log(updatedFilterGroupsData);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51596034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档