以下为ChatGPT自动生成的解答,正确与否请自行判断。 也许你也可以从大家的发帖中找到想要的答案!
BFE.devAI解答 - JavaScript 代码题
12. 实现 Immutability helper
以下是实现Immutability helper的示例代码:
function update(original, updates) { const updated = Array.isArray(original) ? [...original] : {...original}; for (let key in updates) { if (key === "$push") { updated.push(...updates[key]); } else if (key === "$set") { updated = updates[key]; } else if (key === "$merge") { updated = {...updated, ...updates[key]}; } else if (key === "$apply") { updated = updates[key](updated); } else { updated[key] = update(updated[key], updates[key]); } } return updated;}
在这个实现中,我们首先进行了一个浅拷贝,然后根据更新要求逐一更新每一个属性。当 $push
时,我们使用了展开语法 ...
来展开数组,当 $set
时,我们直接将更新值赋给新的对象;当 $merge
时,我们使用了展开语法来合并两个对象;当 $apply
时,我们直接将更新函数作用于原始对象;最后,当属性不是上述特殊类型时,我们使用递归方式对该属性进行更新。