我在一个ReactJS项目中工作,在我的状态中有一个filterGroupsData属性。这是一个对象数组,每个对象都有一个filters属性,它是一个字符串值数组。见下文:
filterGroupsData:[
{"key":1532957059388,"id":1532957059388,"filters":[]},
{"key":1532957059612,"id":1532957059612,"filters":[]},
{"key":1532957059847,"id":1532957059847,"filters":[]}
]如何将元素添加到具有给定id的对象的filters属性中?
我尝试过这样做,但是这样做的结果是用on值覆盖整个对象:
// 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});感谢你的帮助。
发布于 2018-07-30 14:22:16
可以使用findIndex获取要更新的筛选器组的索引,然后创建对象和filters数组的副本并向其添加一个新条目。
示例
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 };
});发布于 2018-07-30 14:19:06
这里:filterGroupData.filters = 'test'
您正在将支柱值设置为字符串,而不是放在数组中。
您需要将项push到filters数组中,如下所示:
filterGroupData.filters.push('test');
发布于 2018-07-30 14:20:41
filters是一个数组,因此您需要在map中使用多行代码的push('test')。
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);
https://stackoverflow.com/questions/51596034
复制相似问题