Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用es6更新对象数组的属性值_Javascript_Ecmascript 6 - Fatal编程技术网

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

Javascript 使用es6更新对象数组的属性值,javascript,ecmascript-6,Javascript,Ecmascript 6,上面的代码工作正常,但对我来说,它不是那么优雅,它看起来超级混乱,也不是那么灵活。如果我的id是数字,我就不能再做切片(I+1)。我可以使用map和object assign来解决这个问题,但我正在寻找更多的替代方法来使用es6更新对象数组的属性值。另一种方法是使用npm包中的update,即使在嵌套状态和 function posts(state = [], action) { switch(action.type){ case 'INCREMENT_LIKES':

上面的代码工作正常,但对我来说,它不是那么优雅,它看起来超级混乱,也不是那么灵活。如果我的id是数字,我就不能再做
切片(I+1)
。我可以使用map和object assign来解决这个问题,但我正在寻找更多的替代方法来使用es6更新对象数组的属性值。另一种方法是使用npm包中的
update
,即使在嵌套状态和

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

沃拉:这是一个很好的选择。如果我不使用redux,那么不可变性仍然重要吗?即使使用正常的ReactJS不可变性材料,您仍然可以使用它。我喜欢这样使用object.assign。您的想法是什么?根据redux文档,不建议使用object.assign,您应该改为使用spread运算符。然而,我发现不变性助手非常有用,为什么不推荐它?如果你使用webpack,你肯定用过babel。我认为不使用es2015/es6没有任何问题
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