For和Foreach循环并返回Set。数组中的第一个重复编号

问题描述 投票:0回答:2

我的问题是关于这些循环的返回结果。这是我的代码。函数应接受数组作为输入,并在其中返回第一个重复编号。我决定在这里使用Set对象。

const arr1 = [2, 2, 3, 2, 5, 6, 6, 9]; 

  const recurring = (arr) => {

    const set = new Set();

    // This returns undefined
    arr.forEach(el => {
      if (set.has(el)) {
        return el;
      } else {
        set.add(el); 
      }   
    })       

    // This returns 2
    for (let el in arr) {
     if (set.has(arr[el])) {
       return arr[el];
     } else {
       set.add(arr[el]); 
     }   
    } 

  }

    recurring(arr1); // Should return 2

在第一种情况下,使用forEach循环,一切正常,我可以console.log Set和el,但可以看到它,但是由于某种原因,它返回undefined。

在for循环中的第二种情况下,所有内容也都可以使用,但实际上它返回值。

如果使用return关键字,这些循环之间是否有很大的不同?我想念什么?

javascript foreach set recurrence for-in-loop
2个回答
0
投票

在使用forEach的情况下,您正在传递匿名函数。在该范围内,返回值将退出该forEach函数,并且您的包装器函数recurring将继续执行以下代码。

在第二个示例中,您没有创建另一个函数,因此返回值适用于recurring函数。


0
投票

您需要在函数中返回某些内容,并且需要使用find而不是forEach,因为最后一个不会删除任何返回值。

const arr1 = [2, 2, 3, 2, 5, 6, 6, 9];

const recurring = (arr) => {
    const set = new Set();
    return arr.find(el => {
        if (set.has(el)) return true;
        set.add(el);
    });
};

console.log(recurring(arr1));
© www.soinside.com 2019 - 2024. All rights reserved.