Javascript 在数组中查找元素的最佳方法是什么?
我有一个病人列表的数组,他们都有唯一的idJavascript 在数组中查找元素的最佳方法是什么?,javascript,arrays,reactjs,Javascript,Arrays,Reactjs,我有一个病人列表的数组,他们都有唯一的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: "
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在patients数组中查找患者并更新该患者的位置。我在数组中查找患者的方法是使用map在患者数组上循环,检查
patientId匹配数组中的id并添加该患者的位置。然而,地图总是会在每一页上都显示出来
patients数组中的patient也会执行不必要的循环&如果数组变大,那么循环成本会很高。我知道还有其他方法可以找到
数组,即findIndex方法,但它是否比映射更好?这个用例的最佳方法是什么
<Button
id={location}
onClick={() => addPatientLocation(patientId, location}
>
{location}
</Button>
你能用Map代替Array吗?它将更快地让患者通过id。
你能用地图代替数组吗?它将更快地让患者通过id。 您可以使用findIndex
let patients = [...this.state.patients]
let index = patients.findIndex(t=>t.id == patientId)
patients[index] = { ...patients[index], location: value }
this.setState({patients})
您可以使用findIndex
let patients = [...this.state.patients]
let index = patients.findIndex(t=>t.id == patientId)
patients[index] = { ...patients[index], location: value }
this.setState({patients})
我的例子利用了。我对findIndex和map函数进行了基准测试,见下面的结果。基准测试表明findIndex的速度要快得多
var t1=performance.now;
常数患者=[
{id:1,姓名:乔,年龄:6,地点:},
{id:12,姓名:她,年龄:2,地点:},
{id:1123,姓名:金,年龄:10,地点:},
{id:11234,姓名:尼克,年龄:23,地点:},
{id:12345,姓名:菲尔,年龄:50,地点:},
];
const index=patients.findIndexelem=>elem.id==11234;
患者[索引]。位置=位置;
对照组:对数患者[指数];
var t2=性能。现在;
控制台日志时间消耗,t2-t1 我的例子利用了。我对findIndex和map函数进行了基准测试,见下面的结果。基准测试表明findIndex的速度要快得多
var t1=performance.now;
常数患者=[
{id:1,姓名:乔,年龄:6,地点:},
{id:12,姓名:她,年龄:2,地点:},
{id:1123,姓名:金,年龄:10,地点:},
{id:11234,姓名:尼克,年龄:23,地点:},
{id:12345,姓名:菲尔,年龄:50,地点:},
];
const index=patients.findIndexelem=>elem.id==11234;
患者[索引]。位置=位置;
对照组:对数患者[指数];
var t2=性能。现在;
控制台日志时间消耗,t2-t1;如果在设置状态后多次使用“查找”操作。可以将数组转换为具有patients={id:}的对象。然后每个搜索都将是O1,否则您将不得不进行线性搜索。请检查此链接以使用Array.find并不要忘记检查我可以使用它来确定您需要polyfill还是NotLocation!==位置如果在设置状态后多次使用查找操作。可以将数组转换为具有patients={id:}的对象。然后每个搜索都将是O1,否则您将不得不进行线性搜索。请检查此链接以使用Array.find并不要忘记检查我可以使用它来确定您需要polyfill还是NotLocation!==locationmap构造一个新数组,而findIndex不构造一个新数组map构造一个新数组,而findIndex不构造一个新数组@Andy我以为他担心当数组变大时会在整个数组上循环,尽管这是不可能的,因为数组几乎无法达到数百万个元素来影响他的表演code@Andy我认为当数组变大时,他会担心在整个数组上循环,尽管这是不可能的,因为数组几乎不能达到数百万个元素,从而影响他的代码的性能结果不一致使用映射时间消耗14.1299995930121.99499987147748用于findIndex@muddassir如果您多次运行它,您的结果将被缓存。但是,即使您在重新加载页面时多次运行findIndex,findIndex也总是比map快!使用map时间消耗1.9999987147748的结果与使用map时间消耗14.1299999593012的结果不一致findIndex@muddassir如果您多次运行它,您的结果将被缓存。但是,即使您在重新加载页面时多次运行findIndex,findIndex也总是比map快!