gpt4 book ai didi

javascript - 在这种情况下,我如何实现功能循环语句而不是 for 循环?

转载 作者:行者123 更新时间:2023-12-03 09:33:20 24 4
gpt4 key购买 nike

如何使用功能循环语句(map、forEach、reduce)而不是 for 循环来检查数组中任意两个元素的总和是否存在于数组中。

例如像这样的数组

[1, 2, 9, 4, 3] // would return true as 1 + 2 = 3
[2,7,12,6,8,20] // true as 2 + 6 = 8 which is enough to make it true
[1, 2, 4, 9] //would return false

我可以通过 for 循环来做到这一点:

const checkSumExist = arr => {
for(let i = 0; i < arr.length; i++) {
for(let j = i + 1; j < arr.length; j++) {
if(arr.includes(arr[i] + arr[j])) return true;
}
}

return false;
}

那么在这种情况下是否有使用函数式循环语句而不是嵌套 for 循环的解决方案???

最佳答案

一个简化的实现——

const main = (xs = []) =>
xs .some ((n, i) =>
xs .some ((m, j) =>
i < j && xs .includes (n + m)
)
)

console.log
( main ([ 1, 2, 4, 9, 4, 3 ]) // true
, main ([ 2, 7, 12, 6, 8, 20 ]) // true
, main ([ 1, 2, 4, 9 ]) // false
)

此优化使用 Set improves speed to O(1)

const main = (xs = [], s = new Set (xs)) =>
xs .some ((n, i) =>
xs .some ((m, j) =>
i < j && s .has (n + m)
)
)

console.log
( main ([ 1, 2, 4, 9, 4, 3 ]) // true
, main ([ 2, 7, 12, 6, 8, 20 ]) // true
, main ([ 1, 2, 4, 9 ]) // false
)

记住只在必要的地方优化

关于javascript - 在这种情况下,我如何实现功能循环语句而不是 for 循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52980642/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com