【发布时间】:2020-03-16 10:28:28
【问题描述】:
我有一个包含患者列表的数组,他们都有唯一的 ID。
this.state = {
patients = [
{id: "1", name: "Joe", age: 6, location: ''},
{id: "12", name: "Her", age: 2, location: ''},
{id: "1123", name: "Jin", age: 10, location: ''},
{id: "11234", name: "Nick", age: 23, location: ''},
{id: "12345", name: "Fil", age: 50, location: ''},
];
当用户点击按钮时,它会在回调中发送患者唯一 ID 和位置。然后,我使用唯一 ID 在患者数组中查找患者并更新该患者的位置。我在数组中找到患者的方式是使用 map 循环遍历患者数组,检查是否
patientId 匹配数组中的 id 并添加该患者的位置。然而,地图总是会遍历每一个
patients array 中的耐心,所以如果数组变大,不必要的循环也会很昂贵。我知道还有其他方法可以在
数组,即findIndex() method,但它比地图更好吗?这个用例的最佳方法是什么?
<Button
id={location}
onClick={() => addPatientLocation(patientId, location}
>
{location}
</Button>
检查患者 ID 是否匹配并更新患者详细信息的功能
addPatientLocation(patientId, location) {
this.setState(prevState => ({
patients: prevState.patients.map(p => {
if (p.id === patientId) {
return { ...p, location: location };
}
return p;
}),
}));
}
【问题讨论】:
-
如果您在设置状态后多次使用
find操作。您可以将数组转换为具有patients = {id: <object>}的对象。那么每次搜索都将是O(1),否则你将不得不进行线性搜索。 -
检查此链接以使用 Array.find() developer.mozilla.org/en/docs/Web/JavaScript/Reference/… 并且不要忘记检查我可以用来决定你是否需要 polyfill
-
locaiton!==location
标签: javascript arrays reactjs