React中Array.find查找对象数组匹配项结果异常排查
问题根因
你的代码有三个核心问题,导致运行结果不符合预期:
Array.find()的回调函数需要返回布尔值标记当前项是否匹配,你写的回调加了函数体大括号,但没有写return返回判断结果,默认返回undefined(隐式转换为false),所以find会判定所有项都不匹配,最终返回undefined。- 判断条件缺少对
analyser不为undefined的显式校验:如果匹配id的项和currentNodee的analyser都是undefined,===判断会成立,不符合你“analyser为undefined则不匹配”的要求。 - 就算find匹配到了项,你直接打印整个匹配对象,不是取对象里的
analyser值打印,也不符合需求。
修正后代码
const allNodes = [ { analyser: undefined, id: 7 }, { analyser: "abc", id: 6 }, ]; const currentNodee = { analyser: "abc", id: 7 }; const matchedItem = allNodes.find((option) => { // 同时校验三个条件:id相等、analyser不为undefined、analyser值相等 return ( option.id === currentNodee.id && option.analyser !== undefined && option.analyser === currentNodee.analyser ); }); // 只有真的找到匹配项时,才打印对应的analyser值 if (matchedItem) { console.log(matchedItem.analyser); }
运行你给出的测试用例时,id为7的节点analyser是undefined,id为6的节点id不匹配,所以不会输出任何内容,完全符合需求。
如果要简化写法,find的回调也可以写成隐式返回的箭头函数形式:
const matchedItem = allNodes.find(option => option.id === currentNodee.id && option.analyser !== undefined && option.analyser === currentNodee.analyser );
内容的提问来源于stack exchange,提问作者walee
相关产品推荐
相关产品推荐

