通过与另一个对象 (JavaScript) 进行比较,有条件地向 JSON 对象添加新属性



例如,我有两个数组"StudentInfo">

[
  {
   "id": "1234",
   "name": "A"
  },
  {
   "id": "1134",
   "name": "B"
  },
  {
   "id": "2234",
   "name": "C"
  },
  {
   "id": "3234",
   "name": "D"
  }     
]

和"好学生名单">

[
  "1234",
  "1134"
]

那么我怎样才能在 StudentInfo 中添加一个关于学生类型的属性取决于 GoodStudentList,如果他们的 ID 在好列表中,那么他们的类型是好的,否则他们的类型是正常的:

 [
      {
       "id": "1234",
       "name": "A",
       "type": "Good"
      },
      {
       "id": "1134",
       "name": "B"
       "type": "Good"
      },
      {
       "id": "2234",
       "name": "C"
       "type": "Normal"
      },
      {
       "id": "3234",
       "name": "D",
       "type": "Normal"
      }     
]

抱歉,我知道这可能很容易,但我真的无法理解 JS qwq 中的映射内容

您可以使用forEach()遍历学生数组,并使用includes()测试每个 id 是否在良好列表中。然后,在遍历学生时根据结果添加正确的属性:

let StudentInfo = [{"id": "1234","name": "A"},{"id": "1134","name": "B"},{"id": "2234","name": "C"},{"id": "3234","name": "D"}     ]
let GoodStudentList = ["1234","1134"]
StudentInfo.forEach(student => {
  student.type = GoodStudentList.includes(student.id) ? "Good" : "Normal"
})
console.log(StudentInfo)

您可以在 StudentInfo 数组上使用 map 方法,对于每个元素,检查该对象的 id 是否存在于GoodStudentList中。它可能看起来像这样:

StudentInfo = StudentInfo.map((student) => {
  if (GoodStudentList.indexOf(student.id) >= 0) {
   student.type = 'Good';
  } else {
    student.type = 'Normal';
  }
}) 

在这里,您正在检查每个学生的学生 ID 索引是否大于 0(意味着它存在于数组中(。如果数组中不存在,它将返回 -1,因此不传递条件。返回的是 StudentInfo 数组,所有学生都修改为现在包含 type 属性。

使用普通的旧迭代:

let list = [
    {
        "id": "1234",
        "name": "A"
    },
    {
        "id": "1134",
        "name": "B"
    },
    {
        "id": "2234",
        "name": "C"
    },
    {
        "id": "3234",
        "name": "D"
    }     
];
let good = [
    "1234",
    "1134"
];
for (let key in list){
    for (let i of good){ 
       if (i === list[key].id){
           list[key].type = "Good";
           break;
       }
       else list[key].type = "Neutral";
    }
}
console.log(list);

最新更新