如何从反应堆中过滤阵列

时间:2020-07-20 12:07:45

标签: javascript reactjs

我只想过滤fields元素以将其删除。我已经设法删除了所有数据,但是我希望该选项也只删除字段的一个值。我设法通过这段代码过滤数据

this.setState(
  state => ({
    data: state.data.filter((row, j) => j !== i),
  })
);

但是我只想从data.fields中删除一项。我已经尝试过使用这个

this.setState(state => ({
  data: state.data.filter((row, j) => row.fields[x].bitname !== k),
}));

但是我还没有运气。

这是数据结构:

data: [
  {
    registerName: "MANID",
    address: 0,
    mode: "R",
    size: 8,
    por: 0,
    doc: "document level",
    fields: [
      { bitname: 'INT', bitmask: '16', bitvalue: '*', maskname: '*', doc: 'doc level' },
      { bitname: 'IDLE_MODE', bitmask: '0', bitvalue: '*', maskname: '*', doc: 'doc level' },
    ]
  }
]

2 个答案:

答案 0 :(得分:1)

您应避免从现有对象中删除该字段,因为这会直接改变状态。尝试这样的事情。

this.setState(
      state => (
        {
          data: state.data.map((row, j) => {
              if (j === i) {
                return {
                  ...row,
                  fields: row.fields.filter(field => field.bitname !== k)
                }                
              }
              return row;
            }),
        })); 

答案 1 :(得分:0)

如果您的对象是row.fields[x],而您想从该对象中删除bitname属性,则正确的方法是:

delete row.fields[x].bitname

以下是从对象中删除属性的示例片段:

const field = {
  name:'Sean',
  age:25,
  bitname:'some value'
}

delete field.bitname

console.log(field)