如何用filter()获取两数组同索引元素差值为负的元素索引
问题解决:用filter获取两数组同索引差值小于0的元素索引
问题背景
需要获取两个数组中同索引元素差值小于0的元素索引,已经用flatMap()实现需求,但使用filter()时只能得到原数组的对应元素,无法拿到索引。
为什么你的filter写法不对?
filter()的核心作用是筛选原数组中符合条件的元素,它的返回值是原数组的子集,而非你在回调里返回的索引值。你之前的代码中,回调里返回idx或'',本质是把这些值转为布尔值来判断是否保留原数组元素,所以最终得到的是array1中符合条件的元素,而非索引。
正确的filter实现方式
要通过filter()拿到目标索引,需要先构建一个索引数组,再对这个索引数组进行筛选,判断对应位置的差值是否满足条件:
let array1 = ['524', '587', '034', '816', '65', '7'] let array2 = ['3', '0', '33', '4', '193', '13'] function getIdxNegativeDiff2(array1, array2){ // 先生成包含所有索引的数组,再筛选符合条件的索引 return Array.from({length: array1.length}, (_, idx) => idx) .filter(idx => parseFloat(array1[idx]) - parseFloat(array2[idx]) < 0); } // 测试输出 console.log(getIdxNegativeDiff2(array1, array2)); // 输出: [4, 5]
也可以先通过map()把原数组转成索引集合,再筛选:
function getIdxNegativeDiff2(array1, array2){ return array1.map((_, idx) => idx) .filter(idx => parseFloat(array1[idx]) - parseFloat(array2[idx]) < 0); }
验证结果
运行上述代码后,会得到和flatMap()版本一致的结果[4,5],对应array1中与array2同索引差值小于0的位置。
内容的提问来源于stack exchange,提问作者Mehdi
相关产品推荐
相关产品推荐

