Javascript 在不变性助手的实现上构建递归函数

Javascript 在不变性助手的实现上构建递归函数,javascript,function,object,recursion,immutability,Javascript,Function,Object,Recursion,Immutability,这是BFE.dev上为不变性助手提供的现有解决方案之一,但是,我注意到响应$set时,如果目标位于基础级别,它将永远不会起作用-我不知道如何创建异常。如果有人能看一看,我将不胜感激 constkeymap=[“$push”、“$set”、“$merge”、“$apply”]; 功能更新(数据、命令){ 返回行走(数据、命令); } 功能漫游(数据、命令、pdata、命令键){ //你的代码在这里 for(让k进入命令){ if(keyMap.indexOf(k)!=-1){ 开关(k){ 案例

这是BFE.dev上为不变性助手提供的现有解决方案之一,但是,我注意到响应$set时,如果目标位于基础级别,它将永远不会起作用-我不知道如何创建异常。如果有人能看一看,我将不胜感激

constkeymap=[“$push”、“$set”、“$merge”、“$apply”];
功能更新(数据、命令){
返回行走(数据、命令);
}
功能漫游(数据、命令、pdata、命令键){
//你的代码在这里
for(让k进入命令){
if(keyMap.indexOf(k)!=-1){
开关(k){
案例“$push”:
if(数组的数据实例){
data.push(…命令[k]);
}否则{
抛出错误(“无数组”);
}
打破
案例“$set”:
pdata[commandkey]=命令[k];
打破
案例“$merge”:
if(对象的数据实例){
pdata[commandkey]=Object.assign(数据,命令[k]);
}否则{
抛出错误(“无对象”);
}
打破
案例“$apply”:
pdata[commandkey]=命令[k]。调用(null,pdata[commandkey]);
打破
}
}否则{
if(命令[k]){
行走(数据[k],命令[k],数据,k);
}
}
}
返回数据;
}
log(更新({b:{a:1},c:5},{b:{a:1},'$set':'5'}));

我在这里看不到任何不变的转换。预期产量是多少?