在打字稿中访问具有属性名称的数组

时间:2019-05-19 08:06:52

标签: angular typescript

我有一个看起来像这样的对象:

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。我想知道是否有更好的方法可以做到这一点。给定停止名称后,我可以直接访问合适的学生数组吗? 我正在使用打字稿

2 个答案:

答案 0 :(得分:5)

您的res对象首先被错误地声明,它应为数组,如下面的代码示例所示。

要检查约束,可以使用someincludes,如下例所示。

如果需要对象,请使用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