使用es6更新对象数组的属性值

时间:2017-06-04 05:58:35

标签: javascript ecmascript-6

function posts(state = [], action) {
    switch(action.type){
        case 'INCREMENT_LIKES':
            const i = action.index 
            return [
                ...state.slice(0,i),
                {...state[i], likes: state[i].likes + 1},
                ...state.slice(i + 1),
            ]
        default:
            return state
    }
}

export default posts

以上代码有效但对我而言并不那么优雅,它看起来非常混乱而且不那么灵活。如果我的ID号码有问题,我就不能再slice(i + 1)了。我可以使用带有对象分配的地图来解决它,但我正在寻找更多替代方法update property value of array of object using es6

1 个答案:

答案 0 :(得分:0)

另一种方法是使用来自npm package immutability-helperupdate,即使在深度嵌套状态和

的情况下,它也很容易处理和理解。
import update from `immutability-helper`


function posts(state = [], action) {
    switch(action.type){
        case 'INCREMENT_LIKES':
            const i = action.index 
            return update(state, {
                 [i]: {
                      likes: {
                            $set: state[i].likes + 1
                      }
                 }
            })

        default:
            return state
    }
}

export default posts