使用 es6-arrow 函数语法检查数组中是否有两项总和等于给定值
Check if there are two items in an array whose sum is equal to a given value with es6-arrow function syntax
以下代码检测在给定数组 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))
是一个函数表达式,returns是一个函数。
另一部分是Set
的实例
(new Set)
立即调用函数表达式 (IIFE (immediately-invoked function expression)) 并作为 set
.
的闭包
(set => )
(new Set)
作为回调的最后一部分是
n => set.has(n) || !set.add(sum - n)
从数组中获取单个值,检查该值是否在集合中或将增量添加到集合中。添加到 Set
returns 实例并且是真实的。这是不需要的并且被否定以防止迭代提前退出。
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));
那么如果我们将箭头函数转换成普通的箭头函数就更容易理解了。
const arrx = [3, 6, 7];
const sum = 9;
const findSum2 = function(arr, sum) { // (arr, sum) =>
let search = function(set) { // set =>
return function(n) { // n =>
const r =
set.has(n) || !set.add(sum - n); // same
return r;
}
}
let init = search(new Set); // (..)(new Set) part
return arr.some(init);
}
console.log(findSum2(arrx, sum));
以下代码检测在给定数组 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))
是一个函数表达式,returns是一个函数。
另一部分是Set
(new Set)
立即调用函数表达式 (IIFE (immediately-invoked function expression)) 并作为 set
.
(set => )
(new Set)
作为回调的最后一部分是
n => set.has(n) || !set.add(sum - n)
从数组中获取单个值,检查该值是否在集合中或将增量添加到集合中。添加到 Set
returns 实例并且是真实的。这是不需要的并且被否定以防止迭代提前退出。
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));
那么如果我们将箭头函数转换成普通的箭头函数就更容易理解了。
const arrx = [3, 6, 7];
const sum = 9;
const findSum2 = function(arr, sum) { // (arr, sum) =>
let search = function(set) { // set =>
return function(n) { // n =>
const r =
set.has(n) || !set.add(sum - n); // same
return r;
}
}
let init = search(new Set); // (..)(new Set) part
return arr.some(init);
}
console.log(findSum2(arrx, sum));