使用不变性助手修改数组的每个值

Jor*_*n S 0 javascript arrays immutability reactjs

我正在努力找出最佳实践是使用不变性帮助程序修改对象数组中的每个值的最佳方法。

例如,如果要在我的状态下使用此功能:

this.state = {
    items: [
        {
            name: "test",
            subItems: [
                {val: false}, {val: true}, {val: false}
            ]
        },
        {
            name: "test2",
            subItems: [
                {val: true}, {val: true}, {val: false}
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我想将每个设置valfalse,我该怎么做。

我一次可以做一次,但是必须有更好的方法:

let elements = update(this.state.items, {
  [idx1]:{
    subItems:{
      [idx2]:{
        val: {
          $set: false
        }
      }
    }
  }
});
Run Code Online (Sandbox Code Playgroud)

And*_*yco 5

这当然是可能的,但是乍一看,它除了可读性或可理解性之外,都是一切。

const nextState = update(state, {
    items: {
    $apply: (items) => {
        return items.map(item => {
        return update(item, {
            subItems: {
            $apply: (subItems) => {
                return subItems.map(subItem => {
                return update(subItem, {
                    val: {
                    $set: false
                  }
                })
              })
            }
          }
        })
      })
    }
  }
});
Run Code Online (Sandbox Code Playgroud)