如何使用 find 方法在函数中搜索对象

How to use find method to search for an object in a function

我无法使用查找功能按 ID 查找用户。我的这个 getUsers() 函数 returns 一个对象数组。

function getUsers(filter, limit, offset) {
  let userList = [];
  for (let i = 0; i < 100; i++) {
    let user = {};
    user.id = i;
    user.firstname = 'firstname_' + i;
    user.lastname = 'lastname' + i;
    user.email = user.userId + "@hotmail.com";
    userList.push(user);
  }
  return JSON.stringify(userList);
}

我想在此处通过用户 ID 查找用户,但它显示未找到数据:

app.get('/shops/:shopid/users/:userId', (req, res) => {
   let users = getUsers(undefined, undefined, undefined);
   const result = users.find(u => u.id === parseInt(req.params.userId));  
   if(!result) res.status(404).send('Data not found');
   res.send(result);
});


因为 getUsers return 是 JSON 字符串而不是数组。 find 方法仅适用于数组。所以你有几个选择。

选项 1:只需 return getUSers 函数中的数组

function getUsers(filter, limit, offset) {
  let userList = [];
  for (let i = 0; i < 100; i++) {
    let user = {};
    user.id = i;
    user.firstname = 'firstname_' + i;
    user.lastname = 'lastname' + i;
    user.email = user.userId + "@hotmail.com";
    userList.push(user);
  }
  return userList;
}

选项 2:调用 getUsers

时使用 JSON.parse
app.get('/shops/:shopid/users/:userId', (req, res) => {
   let users = JSON.parse(getUsers(undefined, undefined, undefined));
   const result = users.find(u => u.id === parseInt(req.params.userId));  
   if(!result) res.status(404).send('Data not found');
   res.send(result);
});

您的问题

getUsers() 正在返回一个 string,但您想要一个用户数组,而不是一个字符串,因为 string 没有方法 find()

只需删除方法 getUsers() 中的 JSON.stringify() 即可。

function getUsers(filter, limit, offset) {
  let userList = [];
  for (let i = 0; i < 100; i++) {
    let user = {};
    user.id = i;
    user.firstname = "firstname_" + i;
    user.lastname = "lastname" + i;
    user.email = user.userId + "@hotmail.com";
    userList.push(user);
  }
  // remove a list instead of a string
  return userList;
}

let users = getUsers();
console.log(users);
const result = users.find((u) => u.id === 0);
if (!result) console.log(`User ${result.id} was not found!`);
else console.log(`User ${result.id} was found!`);

一些评论

没有必要显式调用所有参数都为 undefined 的函数,因为如果您不提供它们,它们将自动为 undefined,因此 getUsers() 就足够了。

您的方法 getUsers() 可以通过使用 map() function and template strings.

变得更加简洁和可读

function getUsers(filter, limit, offset) {
  return [...new Array(100)].map((_, index) => ({
    id: index,
    firstname: `firstname_${index}`,
    lastname: `lastname_${index}`,
    email: `${index}@hotmail.com`,
  }))
}

let users = getUsers();
console.log(users);
const result = users.find((u) => u.id === 0);
if (!result) console.log(`User ${result.id} was not found!`);
else console.log(`User ${result.id} was found!`);
.as-console-wrapper { max-height: 100% !important; top: 0; }