我有一个看起来像这样的对象:
let res = [{
stop: "stop1",
students: [
"Maria",
"Mario"
]},
{stop: "stop2",
students: [
"Giovanni",
"Giacomo"
]
}];
和一个用于检查学生是否已在给定的巴士站出现的功能:
checkStudent(stopName: string, studentName: string): boolean {
// iterate over res and check if students is present
}
到目前为止,我所做的是遍历res对象,检查每个stopName直到其中一个与'stopName'参数匹配,然后遍历students数组以检查是否存在student。我想知道是否有更好的方法可以做到这一点。给定停止名称后,我可以直接访问合适的学生数组吗? 我正在使用打字稿
答案 0 :(得分:5)
您的res
对象首先被错误地声明,它应为数组,如下面的代码示例所示。
要检查约束,可以使用some
和includes
,如下例所示。
如果需要对象,请使用filter
代替some
。
let res = [{
stop: "stop1",
students: [
"Maria",
"Mario"
]
}, {
stop: "stop2",
students: [
"Giovanni",
"Giacomo"
]
}];
function checkStudent(stopName, studentName) {
return res.some(x => x.stop == stopName && x.students.includes(studentName));
}
function checkStudentAndReturnObject(stopName, studentName) {
return res.filter(x => x.stop == stopName && x.students.includes(studentName));
}
console.log(checkStudent("stop1", "Maria"));
console.log(checkStudentAndReturnObject("stop1", "Maria"));
答案 1 :(得分:0)
您不能真正“直接”访问给定停止名的正确学生数组,因为该数组不是由停止名键入的,但是您可以这样做,以使用for循环来保存您的代码:
const targetStop = res.find(stopObject => stopObject.stop === stopName);
targetStop.students // <--- your array