gpt4 book ai didi

javascript - 使用扩展和解构运算符修改不可变对象(immutable对象)的最短方法是什么

转载 作者:行者123 更新时间:2023-12-03 00:34:41 25 4
gpt4 key购买 nike

我正在寻找一个纯函数来修改我的不可变状态对象。作为参数给出的原始状态必须保持不变。这在使用像 Redux 这样的框架时特别有用。并与 immutable 一起工作javascript 中的对象要容易得多。特别是自从使用 Babel 使用对象扩展运算符以来已经成为可能。

我没有找到比首先复制对象,然后分配/删除我想要的属性更好的方法:

function updateState(state, item) {
newState = {...state};
newState[item.id] = item;
return newState;
}

function deleteProperty(state, id) {
var newState = {...state};
delete newState[id];
return newState;
}

我觉得还可以再短一点

最佳答案

针对状态的操作,其中状态被认为是不可变的。

添加或更新属性的值:

// ES6:
function updateState(state, item) {
return Object.assign({}, state, {[item.id]: item});
}

// With Object Spread:
function updateState(state, item) {
return {
...state,
[item.id]: item
};
}

删除属性

// ES6:
function deleteProperty(state, id) {
var newState = Object.assign({}, state);
delete newState[id];
return newState;
}

// With Object Spread:
function deleteProperty(state, id) {
let {[id]: deleted, ...newState} = state;
return newState;
}

// Or even shorter as helper function:
function deleteProperty({[id]: deleted, ...newState}, id) {
return newState;
}

// Or inline:
function deleteProperty(state, id) {
return (({[id]: deleted, ...newState}) => newState)(state);
}

关于javascript - 使用扩展和解构运算符修改不可变对象(immutable对象)的最短方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36553129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com