如何在不改变的情况下删除嵌套对象状态?
how can I remove a nested object state without mutating?
一种方法是使用 Slice,但它与嵌套对象兼容还是仅适用于数组。如果是这样,我将如何对嵌套对象进行切片?即我的状态是
Object = {
a:{ 1: '1', 2: '2', 3: '3' },
b:{ 1: '1', 2: '2', 3: '3' },
c:{ 1: '1', 2: '2', 3: '3' }
}
并且我想从对象中删除 b。
我能想到的一种方法是使用对象解构:
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};
如果你可以使用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
}, {})
为了从 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
}, {})
如果你使用 ES6,这是单行工作。而且,我确定您使用的是 ES6。
希望对您有所帮助。
const a = {
a: {
1: '1',
2: '2',
3: '3'
},
b: {
1: '1',
2: '2',
3: '3'
},
c: {
1: '1',
2: '2',
3: '3'
}
}
const { b, ...remaining} = a
console.log(remaining)
一种方法是使用 Slice,但它与嵌套对象兼容还是仅适用于数组。如果是这样,我将如何对嵌套对象进行切片?即我的状态是
Object = {
a:{ 1: '1', 2: '2', 3: '3' },
b:{ 1: '1', 2: '2', 3: '3' },
c:{ 1: '1', 2: '2', 3: '3' }
}
并且我想从对象中删除 b。
我能想到的一种方法是使用对象解构:
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};
如果你可以使用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
}, {})
为了从 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
}, {})
如果你使用 ES6,这是单行工作。而且,我确定您使用的是 ES6。
希望对您有所帮助。
const a = {
a: {
1: '1',
2: '2',
3: '3'
},
b: {
1: '1',
2: '2',
3: '3'
},
c: {
1: '1',
2: '2',
3: '3'
}
}
const { b, ...remaining} = a
console.log(remaining)