现在我实现了在用户组中查找用户的功能。这些是嵌套组,因此搜索是通过递归调用实现的。我的代码列在下面;我也使用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
};
}
答案 0 :(得分:0)
Hy Buddy。
Javascript总是按值传递,但是当变量引用对象时,“value”是对象的引用。
因此,如果更改变量的值永远不会更改基础图元或对象,则只需将变量指向新的图元或对象。
答案 1 :(得分:0)
为什么不直接从search
函数返回值?
if(g.userList[i]===tokenAcc) {
return JSON.parse(JSON.stringify(g));
}
然后在你的第二个函数中:targetG = search(tokenAcc, groups,targetG);
修改强>
鉴于您正在使用redux,我强烈建议您转向更多功能性和纯方法,除其他外,这意味着您避免副作用(即你现在正在做什么)并始终使用函数的返回值。有关它的更多信息,请查看官方redux documentation