纯JS练习:如何用.map实现两数之和索引查找功能?
用.map方法实现数组元素和目标值的索引对查找
实现代码
function pairsToSum(numList, sum) { return numList.map((num, i) => { // 遍历当前索引之后的所有元素,避免重复配对 return numList.slice(i + 1).map((_, j) => { const actualIndex = i + 1 + j; if (num + numList[actualIndex] === sum) { return [i, actualIndex]; } }).filter(pair => pair !== undefined); // 过滤不符合条件的结果 }).flat(); // 扁平化二维数组为一维数组 } console.log(pairsToSum([1, 1, 0, 1], 2)); // 输出: [ [ 0, 1 ], [ 0, 3 ], [ 1, 3 ] ]
思路说明
- 外层
map遍历数组的每个元素及其索引i,只关注当前索引之后的元素,避免生成重复的索引对(比如不会出现[1,0]这种和[0,1]重复的情况)。 - 内层
map处理i之后的子数组,通过i + 1 + j计算子数组元素对应的原数组索引,判断元素和是否等于目标值,符合条件则返回索引对。 - 用
filter移除内层map返回的undefined(不符合条件的情况),再通过flat()将外层map生成的二维结果数组扁平化,得到最终的索引对列表。
内容的提问来源于stack exchange,提问作者Ivan Ferreira
相关产品推荐
相关产品推荐

