猿问

即使使用删除运算符后,对象属性也不会被删除

我有一系列对象。我想id从中删除一个名为 as 的键。我已使用以下代码将其从对象中删除。

this.state.result.forEach(item => delete item.id);

但 id 仍然没有被删除。我不确定我的代码为什么以及有什么问题。我尝试使用上述逻辑从同一对象中删除几个其他键,效果很好。我面临的唯一问题是id

我认为这个对象属性是不可配置的。如果是这样的话,我们该如何删除呢。

有人可以帮我解决这个问题吗?提前致谢。


开心每一天1111
浏览 170回答 5
5回答

四季花海

也许id是non-configurable,那么你就无法删除它。 请注意,aTypeError仅在严格模式下抛出。

繁华开满天机

**如果您使用react,那么您应该始终使用setState 来更改状态。**    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    });

红颜莎娜

state在计算下一个状态时,您不应该依赖:s 值,因为它可能会由 React 在幕后异步更新。另外,请尽量避免,delete因为它是性能杀手。所以试试这个:this.setState((state, props) => ({  result: state.result.map(({id, ...propsToKeep}) => propsToKeep)}));或者如果你必须使用delete:this.setState((state, props) => ({  result: state.result.map(res => {     delete res.id;     return res;   });}));

慕的地6264312

在 React 中,您无法直接更新state. 你总是必须使用setState方法来做到这一点。所以试试这个。this.setState({ result: this.state.result.map(item => {  let tmpItem = {...item};  delete tmpItem.id;  return {...tmpItem};  })});谢谢!

智慧大石

在 React.js 中,你永远不应该尝试直接改变状态。您必须使用 setState() 才能获得结果。id 没有被删除,因为没有发生重新渲染。从文档中,不要直接修改状态// Wrong this.state.comment = 'Hello';相反,使用 setState():// Correct this.setState({comment: 'Hello'});
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答