На самом деле проблема с .forEach()
методом заключается в том, что его функция callback
всегда возвращает undefined
, даже если вы используете оператор return
.
Если вы проверите ссылку * MD1 метода MDN , вы увидите, что:
forEach()
выполняет функцию обратного вызова один раз для каждого массиваэлемент;в отличие от map()
или reduce()
он всегда возвращает значение undefined
и не является цепным .
Так что в вашем случае return el;
внутри forEach()
обратный вызов всегдаигнорируется, и внутри forEach
обратного вызова return
является специфическим для этой области, поэтому function
ничего не возвращает.
Решение:
Есливы хотите сделать это с forEach()
, вы можете сохранить это flag
в переменной, чтобы вы могли вернуть его после блока forEach()
:
const recurring = (arr) => {
const set = new Set();
let result;
arr.forEach(el => {
if (set.has(el)) {
result = !result ? el : result;
return;
} else {
set.add(el);
}
});
return result;
}
Demo:
const arr1 = [2, 2, 3, 2, 5, 6, 6, 9];
const recurring = (arr) => {
const set = new Set();
let result;
arr.forEach(el => {
if (set.has(el)) {
result = !result ? el : result;
return;
} else {
set.add(el);
}
});
return result;
}
console.log(recurring(arr1));