使用引用调用获取函数 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,我强烈建议您转向更 functional 和 pure 的方法,除其他外事情,意味着你避免副作用(即你现在正在做的事情)并且总是使用函数的 return 值。查看官方 redux documentation 了解更多信息
现在实现一个在用户组中查找用户的功能。这些是嵌套组,所以查找是通过递归调用实现的。我的代码列在下面;我也用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,我强烈建议您转向更 functional 和 pure 的方法,除其他外事情,意味着你避免副作用(即你现在正在做的事情)并且总是使用函数的 return 值。查看官方 redux documentation 了解更多信息