首页 > 解决方案 > 用 Map 或 Filter 方法替换 For 循环

问题描述

最近,我有一个任务要完成,任务如下:

编写一个获取两个参数的函数:

该函数的输出是一个布尔值。如果在传递的数组中有两个元素的和 (+) 等于第二个参数,则输出为“真”。在所有其他情况下,输出为“假”。

所以我用 For 循环解决了这个问题:

function checkSum(set, number) {

    for (let i = 0; i < set.length; i++) {

        for (let j = 1; j < set.length; j++) {

            if ((set[i] + set[j]) === number) {
                return true;
            }
        }
    }

    return false;
}

我只是好奇,有没有办法摆脱 for 循环并使用 map 或 filter 方法。

标签: javascript

解决方案


您的算法似乎是错误的:它还考虑了一个元素与自身的总和——除了第一个元素。IE,

  • checkSum([1, 5], 10)— 返回true,但是
  • checkSum([5, 100], 10)— 返回false

此外,您的算法没有优化——它迭代(几乎)所有元素对。由于必须对数组进行排序,因此可以优化算法以仅迭代相邻元素,直到总和大于给定数。

您可以使用那些“酷地图/过滤器/查找”方法轻松实现算法的非优化,但是使用“旧的好循环”可能更容易实现优化版本。


推荐阅读