Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用Map或Filter方法替换For循环_Javascript - Fatal编程技术网

Javascript 用Map或Filter方法替换For循环

Javascript 用Map或Filter方法替换For循环,javascript,Javascript,最近,我有一项任务要完成,任务如下: 编写一个获取两个参数的函数: 首先是一个非递减数数组 第二个是单个数字 函数的输出是一个布尔值。如果传递的数组中有两个 其和(+)等于第二个参数的元素。在所有其他情况下,输出为“假”。 所以我用For循环解决了这个问题: function checkSum(set, number) { for (let i = 0; i < set.length; i++) { for (let j = 1; j < set.le

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

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

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

所以我用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(设i=0;i

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

您的算法似乎是错误的:它还计算了一个元素本身的和-除了第一个元素。 即

  • 校验和([1,5],10)
    -返回
    真值
    ,但
  • 校验和([5100],10)
    -返回
    false
此外,您的算法没有经过优化-它(几乎)迭代所有元素对。由于必须对数组进行排序,因此可以对算法进行优化,使其仅迭代相邻元素,直到总和大于给定的数字

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

您可以使用来检查数组中的任何元素是否与给定条件匹配,并查找另一个元素,该元素在添加到当前元素时可以产生给定的和

function checkSum(set, number){
    return set.some((x,idx)=>set.find((y,idx2)=>idx!==idx2&&x+y===number));
}
函数校验和(设置、编号){
返回set.some((x,idx)=>set.find((y,idx2)=>idx!==idx2&&x+y==number));
}

日志(校验和([2,2,3],5))是。你看过
.map()
.filter()
的文档了吗?当然!我只是不知道如何使用Map或Filter检查所有数组成员的摘要。谢谢大家的关注。我会解决的。