我有一个处于状态的对象,
this.state = {
selectedValue: {}
}
现在,在这里,我通过以下方式向该对象添加属性
if (e.currentTarget.checked) {
this.setState({
selectedType: {
...this.state.selectedType,
[resumeId]: type
}
})
现在,在其他部分中,我必须删除具有匹配的resumeId
的属性。
还是我需要创建一个array of objects
?我在这里有点困惑。
有人可以帮我吗?
答案 0 :(得分:0)
最好的方法是在您的resumId
上添加前缀:
if (e.currentTarget.checked) {
this.setState({
selectedType: {
...this.state.selectedType,
[`resume-${resumeId}`]: type
}
})
现在,您可以使用一种方法来识别您的resumeId。然后遍历您的selectedType
状态并删除resumeId
。您可以按照以下步骤进行操作:
let selectedType = this.state.selectedType;
for (let key in selectedType) {
if (key.indexOf('resume') !== -1) {
delete selectedType[key]
}
}
this.setState({selectedType})
答案 1 :(得分:0)
if (e.currentTarget.checked) {
this.setState({
selectedType: {
...this.state.selectedType,
[resumeId]: type
}
}) else {
const selectedType = {
...this.state.selectedType
}
delete selectedType[resumeId];
this.setState({
selectedType
});
}
您可以从对象iself中删除resumeId。
答案 2 :(得分:0)
使用Object destructuring
可以轻松实现:
if (e.currentTarget.checked) {
this.setState({
selectedType: {
...this.state.selectedType,
[resumeId]: type
}
})
} else {
// Destructure the resumeId and rest properties
const { resumeId, ...rest} = this.setState.selectedType;
// Only assign the rest properties now
this.setState({ selectedType: ...rest });
}
更新:
要检查所有值是否相同:
const data = { "a": "11", "b": "11", "c":"12", "d" : "11" };
const objectValues = Object.values(data);
// Check first value with every value
const isEveryValueSame = objectValues.every(x => x === objectValues[0]);
console.log(isEveryValueSame);