javascript - 使用map函数代替嵌套循环条件JS
问题描述
我有以下函数,它接受一个数字数组和一个目标值,如果可以添加数组中的任何 2 个数字来给出目标值,则该函数返回 true,否则返回 false。例如,如果数组 = [5,4,2,3,1] 且目标 = 9,则函数应返回 true,即 5+4=9。但是,如果 target = 10,该函数应该返回 false,因为数组中没有 2 个数字可以相加得到 10。
function Solution(array,target) {
for (var i = 0;i<array.length;i++) {
for (var j=0;j!=i && j<array.length;j++) {
if (array[i] + array[j] == target) {
return true
}
}
}
return false
}
上述功能按预期工作,但我认为这不是一个好方法,有人可以告诉我使用地图功能的更有效方法吗?
解决方案
您可以使用所需的增量作为键的哈希表。
这种方法只需要一次迭代。
function solution(array, target) {
const seen = {};
for (const value of array) {
if (seen[value]) return true;
seen[target - value] = true;
}
return false;
}
console.log(solution([5, 4, 3, 2, 1], 9)); // true
console.log(solution([5, 4, 3, 2, 1], 10)); // false
推荐阅读
- node.js - Angular httpclient CORS 请求返回 404 错误
- javascript - 在按钮单击时将 Angular 组件 (HTML) 动态插入到 TineMCE 编辑器
- bash - 有没有办法使用 shell 脚本获取到 FTP 错误日志的链接?
- azure - 无法设置内容类型
- javascript - 我如何找到图表下的区域
- node.js - 显示 10.0 的节点版本,但在创建显示当前版本 4.2.6 的新 Angular 项目时。如何删除 4.2.6?
- github - 通过 API 删除 github 存储库
- javascript - Instagram Graph API pull,工作但运行缓慢,希望得到建议
- mysql - 如何将 JSON 值插入 mysql 数据库?
- sql - ORA-12703: UNION 不支持此字符集转换