我的问题是关于这些循环的返回结果。这是我的代码。函数应接受数组作为输入,并在其中返回第一个重复编号。我决定在这里使用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关键字,这些循环之间是否有很大的不同?我想念什么?
在使用forEach
的情况下,您正在传递匿名函数。在该范围内,返回值将退出该forEach
函数,并且您的包装器函数recurring
将继续执行以下代码。
在第二个示例中,您没有创建另一个函数,因此返回值适用于recurring
函数。
您需要在函数中返回某些内容,并且需要使用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));