javascript - 用 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 方法。
解决方案
您的算法似乎是错误的:它还考虑了一个元素与自身的总和——除了第一个元素。IE,
checkSum([1, 5], 10)
— 返回true
,但是checkSum([5, 100], 10)
— 返回false
。
此外,您的算法没有优化——它迭代(几乎)所有元素对。由于必须对数组进行排序,因此可以优化算法以仅迭代相邻元素,直到总和大于给定数。
您可以使用那些“酷地图/过滤器/查找”方法轻松实现算法的非优化,但是使用“旧的好循环”可能更容易实现优化版本。
推荐阅读
- graphql - Apollo Server 2 中没有 CDN 的 GraphQL Playground
- spring - 基于 Spring 函数的注入
- ios - 添加分享按钮 - Swift
- javascript - getElementById 从祖先元素中删除子类
- java - Android 从给定视图中找不到合适的父级
- r - 如何在 Traminer 中结合状态分布图和单独的图例?
- sql-server - 如何修改默认的 Visual Studio 生成 dockerfile 以包含运行 SQLServer Linux?
- c++ - 无法在 Qt5 中使用 OpenGL 打开覆盖平面
- python - Python:同步程序中的 Websockets
- android - 如何使用 Android 中的 osmdroid 库为折线制作动画?