gpt4 book ai didi

javascript - 使用 es6-arrow 函数语法检查数组中是否有两项总和等于给定值

转载 作者:行者123 更新时间:2023-12-01 16:04:26 25 4
gpt4 key购买 nike

以下代码检测在给定数组 arr 中是否有两项的总和等于变量 sum 中给定的值。为了解决这个问题,互补值 (sum-item) 被存储到一个集合中。

虽然我知道箭头函数和函数式 some() 函数的工作原理,但语法对我来说很晦涩,我很难理解。

const arr = [3,6,7];
const sum = 9;

const findSum = (arr,sum) =>
arr.some((set => n =>
set.has(n) || !set.add(sum-n)) (new Set));

console.log(findSum(arr,sum));

我无法理解 some 函数中的 (new Set) (是一种 IIFE 吗?)以及 n 是怎样的初始化为 arr 项,在我的理解中,代码 set 将初始化为 arr 项。

有人可以解释一下它是如何工作的吗?

最佳答案

您可以更改格式并查看回调的各个部分。

findSum = (arr, sum) => arr.some(
(set => n => set.has(n) || !set.add(sum - n))
(new Set)
);

你找到两个部分,一个

    (set => n => set.has(n) || !set.add(sum - n))

是一个返回函数的函数表达式。

另一部分是 Set 的一个实例

    (new Set)

它立即调用函数表达式 (IIFE ( immediately-invoked function expression )) 并作为 set 的闭包。

    (set =>                                     )
(new Set)

作为回调的最后一部分是

            n => set.has(n) || !set.add(sum - n)

从数组中获取单个值,检查该值是否在集合中或将增量添加到集合中。添加到 Set 会返回实例并且是真实的。这是不需要的,并且会被否定以防止迭代提前退出。

const
arr = [3, 6, 7],
sum = 9,
findSum = (arr,sum) => arr.some(
(set => n => set.has(n) || !set.add(sum - n))
(new Set)
);

console.log(findSum(arr, sum));

关于javascript - 使用 es6-arrow 函数语法检查数组中是否有两项总和等于给定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61139707/

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