以下代码检测在给定数组 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/