Javascript 即使使用“删除”操作符,对象属性也不会被删除
我有一个对象数组。我想从中删除一个名为Javascript 即使使用“删除”操作符,对象属性也不会被删除,javascript,reactjs,Javascript,Reactjs,我有一个对象数组。我想从中删除一个名为id的键。 我使用以下代码将其从对象中删除 this.state.result.forEach(item => delete item.id); 但是,id并没有从中删除。我不知道为什么,我的代码有什么问题。我尝试使用上述逻辑删除同一对象中的其他几个键,效果很好。我面临的唯一问题是id 我认为这个对象属性是不可配置的。如果是的话,我们如何删除它呢 谁能帮我一下吗。提前感谢。可能id是不可配置的,那么您不能删除它。 . 请注意,TypeError仅在严
id
的键。
我使用以下代码将其从对象中删除
this.state.result.forEach(item => delete item.id);
但是,id并没有从中删除。我不知道为什么,我的代码有什么问题。我尝试使用上述逻辑删除同一对象中的其他几个键,效果很好。我面临的唯一问题是id
我认为这个对象属性是不可配置的。如果是的话,我们如何删除它呢
谁能帮我一下吗。提前感谢。可能
id
是不可配置的
,那么您不能删除它。
. 请注意,
TypeError
仅在严格模式下抛出。在React.js中,您不应尝试直接改变状态。查看官方文件中的文章。必须使用setState()才能获得结果。未删除id,因为未进行重新渲染
从文件来看
不要直接修改状态
相反,请使用setState():
在React中,您不能直接更新
状态
。您必须始终使用setState
方法来执行此操作
所以试试这个
this.setState({
result: this.state.result.map(item => {
let tmpItem = {...item};
delete tmpItem.id;
return {...tmpItem};
})
});
谢谢 **
如果您使用的是react,则应始终使用setState
改变状态
**
解释@Prabu答案
this.setState({ // calling setState for updating the state
result: this.state.result.map(item => {
let tmpItem = {...item};// storing all the value here in tmpItem
delete tmpItem.id; // deleting the key
return {...tmpItem}; // returning here
})
}, ()=> {
// for immediatly accessing the state you can use callback
});
在计算下一个状态时,千万不要依赖于
状态
:s值,因为它可能会在后台进行异步更新
另外,尽量避免delete
,因为这是性能杀手
因此,请尝试以下方法:
this.setState((state, props) => ({
result: state.result.map(({id, ...propsToKeep}) => propsToKeep)
}));
或者如果必须使用删除:
this.setState((state, props) => ({
result: state.result.map(res => {
delete res.id;
return res;
});
}));
你在用react吗?很明显,您试图直接改变状态,而不是在react中更新状态的方式。仍然没有删除id。我甚至尝试将状态变量存储在局部变量中,并从中删除id。但同样的问题。请考虑创建一个可重复的代码示例,如用户所指出的,这将有助于调试。扩展运算符对我不起作用。它给出了意外的令牌错误。我已通过以下方式安装了它:。我仍然面临着同样的问题。我提到了关于stackoverflow的几个答案,包括。但是没有任何帮助。除了使用spread运算符,我们可以使用其他解决方案来解决我的问题吗?但它并没有删除id!!此处的id似乎不可配置。。
this.setState((state, props) => ({
result: state.result.map(({id, ...propsToKeep}) => propsToKeep)
}));
this.setState((state, props) => ({
result: state.result.map(res => {
delete res.id;
return res;
});
}));