函数未返回预期结果

bte*_*102 4 javascript

我编写了一个函数来搜索数组并记录一个数字(x)(如果找到)。下面的代码按预期工作,并记录了 1。

let myArr = [54, 23, 499, 342, 1, 44];
let x = 1;

let searchNumber = (arr) => {
  arr.forEach(ele => {
    if (ele == x) {
      console.log(ele);
    }
  })
};

searchNumber(myArr);
Run Code Online (Sandbox Code Playgroud)

我现在想返回分配给变量 x 的数字。期望 y 被分配 499 但是当我记录 y 时它返回未定义。我哪里错了?

let myArr = [54, 23, 499, 342, 1, 44];
let x = 499;

let searchNumber = (arr) => {
  arr.forEach(ele => {
    if (ele == x) {
      return ele;
    }
  })
};

let y = searchNumber(myArr);
Run Code Online (Sandbox Code Playgroud)

Der*_*ang 6

return ele里面forEach回调不是return在的searchNumber功能。

forEach为每个数组元素执行一次提供的函数,所以return ele里面的作用就像return里面提供的函数一样forEach

它不代表returnmain 函数。

在这种情况下,最好使用for循环。

let myArr = [54, 23, 499, 342, 1, 44];
let x = 499;

let searchNumber = (arr) => {
  for (let i = 0; i < arr.length; i ++) {
    if (arr[i] == x) {
      return arr[i];
    }
  }
};

let y = searchNumber(myArr);
console.log(y);
Run Code Online (Sandbox Code Playgroud)


小智 5

如果您查看 return 语句的位置,它实际上位于为每个元素 ( ele => {...})调用的箭头函数内。实际上没有从函数作用域返回任何值searchNumber

尝试在范围内创建一个变量searchNumber并从以下位置修改它arr.forEach()

let myArr = [54, 23, 499, 342, 1, 44];
let x = 499;

let searchNumber = (arr) => {
    let val = null;
    arr.forEach(ele => {
        if (ele == x) {
            val = ele;
        }
    });
   return val;
};

let y = searchNumber(myArr);
Run Code Online (Sandbox Code Playgroud)