如何使用 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; }
我无法使用查找功能按 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; }