如何使用forEach方法确切地console.log我需要的东西

时间:2019-01-17 19:34:39

标签: javascript

我有一个包含50个用户的数组。 因此,然后我有了一个showById方法:(应该登录与ID匹配的控制台用户对象,以防我们无法找到用户,它应该记录“无法找到ID为__的用户”); 这是我所拥有的:

git branch --set-upstream-to=origin/master

我希望当前用户输出一个对象,但是我现在拥有的是当前对象和49次“无法找到用户ID:__”;

3 个答案:

答案 0 :(得分:4)

考虑使用Array find method

showById(id) {
    let found = users.find(user => user.id === id);
    if (!found) {
        return console.log(`Unable to find user id: ${id}`);
    }
    console.log(found.first_name);
}

答案 1 :(得分:2)

您的forEach将评估每个项目。没有退出条件。

相反,请使用glVertex,它会在找到匹配项时停止:

showById(id) {
  let user = users.find(u => u.id === id);
  let output = user ? user.first_name : `Unable to find user id: ${id}`;
  return console.log(output);
}

const users = [{"id": 1,"first_name": "Abner"},{"id": 2,"first_name": "John"}];

function showById(id) {
  let user = users.find(u => u.id === id);
  let output = user ? user.first_name : `Unable to find user id: ${id}`;
  return console.log(output);
}

showById(2);
showById(3);

答案 2 :(得分:1)

发生的事情是您的if/else块位于forEach循环内,因此无论该特定的user发生什么,都会有一些记录到控制台。

要解决此问题,您必须使用另一个变量来跟踪是否已找到该用户。然后,一旦找到该用户,就将该变量设置为true,并在循环后仅打印unable to find user id如果它仍然为false。

showById(id) {
    let found = false;
    users.forEach(function (user) {
        if (id === user.id) {
            console.log(user.first_name);
            found = true;
            break; // not sure if you can break out of forEach loop
        }
    })
    if(!found) {
      console.log(`Unable to find user id: ${id}`);
    }
}