如何在不变异的情况下删除嵌套对象状态?

时间:2016-09-24 16:04:25

标签: reactjs redux immutability

一种方法是使用Slice,但是它与嵌套对象兼容,还是仅用于数组。如果是这样,我如何切片嵌套对象?即我的州是

Object = { 
a:{ 1: '1', 2: '2', 3: '3' }, 
b:{ 1: '1', 2: '2', 3: '3' }, 
c:{ 1: '1', 2: '2', 3: '3' } 
}

我想从Object中删除b。

4 个答案:

答案 0 :(得分:1)

如果您可以使用lodash,我建议您使用omit method

然后你就可以做到:

const omit = require('lodash.omit')
const obj = { 
  a:{ 1: '1', 2: '2', 3: '3' }, 
  b:{ 1: '1', 2: '2', 3: '3' }, 
  c:{ 1: '1', 2: '2', 3: '3' } 
}

const objWithoutB = omit(obj, 'b')

或者你可以手工完成:

const keys = Object.keys(obj).filter((key) => key !== 'b')

const objectWithoutB = keys.reduce((acc, key) => {
  acc[key] = key
  return acc
}, {})

答案 1 :(得分:1)

如果您使用ES6,这是单线工作。而且,我确定您使用的是ES6。

希望它有所帮助。



factories.get(type).create(type);




答案 2 :(得分:0)

我能想到的一种方法是使用对象解构:

let obj = { 
    a:{ 1: '1', 2: '2', 3: '3' }, 
    b:{ 1: '1', 2: '2', 3: '3' }, 
    c:{ 1: '1', 2: '2', 3: '3' } 
}

let {a,c} = obj;
let newState = {a,c};

答案 3 :(得分:-1)

为了从Redux Store中删除状态,我执行了以下操作并且它可以工作:

case DELETE_SAVED_OBJECT :
  return Object.keys(state) // loops over the current state object and gets the keys
  .filter((Id) => action.Id !== Id) // filters out Id for deletion and return an array
  .reduce((prev, current) => { // turn the array back to an object
    prev[current] = state[current]
    return prev   // return the new state 
  }, {})