函数未返回预期结果

4

我编写了一个函数来搜索数组并在找到数字(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);

我希望能够返回我分配给变量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);

你可以使用Array.prototype.find来返回满足条件的第一个元素。 - Lucas D
5个回答

6

forEach 回调函数中的 return ele 并不是 searchNumber 函数的 return

forEach 为数组的每个元素执行一次提供的函数,因此在其中使用 return ele 将像 return 提供的函数一样作用于 forEach 中。

它不代表主函数的 return

在这种情况下,最好使用 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);


感谢 Derek.W 的解释。 - btew2102
如果我的回答有帮到您的话,您可否批准一下我的回答? - Derek Wang
抱歉,我不太习惯使用论坛。我的问题在于误解了 .forEach() 的用法,我在这种情况下避免使用 for 循环。 - btew2102

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);

3

2

.find 方法将返回匹配的元素:

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

let searchNumber = (arr) => arr.find(ele => ele == x);

let y = searchNumber(myArr);

console.log(y);


1
这是一个更好的做法,感谢@Majed Badawi指出。 - btew2102

1
你在这里寻找的可能是“查找”功能。
let searchNumber = (arr) => arr.find(e => e === x);

let y = searchNumber(myArr);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接