Array.find方法为何无法匹配整数0?嵌套数组查找问题咨询
问题分析与解决方案
嘿,这个问题我之前也踩过坑!咱们先拆解下问题出在哪,再给你一个不用改索引的优雅解法。
问题根源
你代码里的内层用了element.find(number => number === value),这里的关键是:find方法返回的是找到的元素本身,而不是布尔值。
当你找的是0的时候,内层find确实找到了0,但0在JavaScript里属于「假值(falsy)」——外层的ids.find会把内层的返回值当作判断条件,看到返回0就会认为这个子数组不满足要求,直接跳过,继续找后面的子数组。最后遍历完所有子数组都没找到符合「真值」条件的,自然就返回undefined了。
而其他数字(比如1、2)都是「真值(truthy)」,内层find返回它们的时候,外层会判定条件成立,所以能正确返回对应的子数组。
解决方案
把内层的find换成some方法就搞定了!some方法专门用来判断数组中是否存在满足条件的元素,它的返回值是布尔值——只要找到匹配项就返回true,完全不会受元素本身是0还是其他值的影响。
修改后的代码:
const ids = [ [0,1,2,3], [4,5,6,7], [8,9,10,11], [12,13,14,15], [16,17,18,19] ] const findBlock = value => { return ids.find( element => { // 用some替代find,返回明确的布尔判断结果 return element.some(number => number === value) }) } console.log(findBlock(0)); // 现在会正确返回[0,1,2,3]
如果你非要用find的话,也可以显式把返回值转成布尔值,比如:
return element.find(number => number === value) !== undefined
不过显然some更语义化,是处理这类「存在性判断」场景的最佳选择。
内容的提问来源于stack exchange,提问作者Blackness
相关产品推荐
相关产品推荐

