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

标签 javascript ecmascript-6 arrow-functions

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

相关文章:

javascript - 为什么 'arr.values()' 抛出错误 "arr.values is not a function"

javascript - brain.js 神经网络的正确训练

Javascript 箭头函数代替 for...of

javascript - 类型 'index' 上不存在属性 '{}'

javascript - 添加空格以填充数组长度

javascript - 如何在 CasperJS 中使用 sendKeys 使用键盘命令

JavaScript 上下文箭头函数

javascript - 有没有办法访问导入组件的 propTypes 和 defaultProps?

javascript - 将在 React 组件中解构的 props 默认值的影响

javascript - 箭头函数 : destructuring arguments and grabbing them as a whole at the same time