使用引用调用获取函数 return 对象值失败

failing using call by reference to take the function return object value

现在实现一个在用户组中查找用户的功能。这些是嵌套组,所以查找是通过递归调用实现的。我的代码列在下面;我也用redux.

我使用 searchGroupUserAcc 调用搜索来获取包含指定用户的目标组。我已经确认参数targetGroup赋值正确,但不知道为什么搜索完后它的值还是{}

我很迷茫;欢迎所有想法。谢谢

function search(groups)(groups, tokenAcc, targetGroup){
    ...
    //search in a group; g is one group is groups
    for(let i=0;i<g.userList.length;++i) {
        if(g.userList[i]===tokenAcc) {
            //confirmed that targetGroup's value is not{}
            targetGroup=JSON.parse(JSON.stringify(g));
            return;
        }
    }
    //for searching subGroups 
    search(...);

}

//tokenAcc is the user account key used to search in the group array.
export function searchGroupUserAcc(tokenAcc){
     return (dispatch)=>{
         ...
         let targetG={};
         //use tokenAcc to search in groups. every group in groups contains the useraccount info
         //expect targetG to hold the return value.
         search(tokenAcc, groups,targetG);
         console.log(targetG);//still prints{}, but why
     };
}

你好哥们。

Javascript总是按值传递,但是当变量引用对象时,"value"是对对象的引用。

因此,如果您更改变量的值,则不会更改底层原语或对象,它只是将变量指向新的原语或对象。

为什么不直接 return 来自 search 函数的值?

if(g.userList[i]===tokenAcc) {
  return JSON.parse(JSON.stringify(g));
}

然后在你的第二个函数中:targetG = search(tokenAcc, groups,targetG);

编辑

鉴于您正在使用 redux,我强烈建议您转向更 functionalpure 的方法,除其他外事情,意味着你避免副作用(即你现在正在做的事情)并且总是使用函数的 return 值。查看官方 redux documentation 了解更多信息