一种比 Array.prototype.find() 更有效的获取数组内部项目的方法
A more efficient way to get an item inside of an array than Array.prototype.find()
我得到一个包含大约 1500 个元素的 cities
数组。
我正在循环获取特定城市:
cities.find(city => city.name === currentAddress.city.name)
也就是O(n)
有没有比每次遍历所有 1500 个元素更有效的方法?
find() 在遇到匹配项时会中断。所以这真的归结为你需要多长时间进行一次搜索。如果您经常这样做,请创建一个使用城市名称作为键的哈希图,以允许 O(1) 查找。您可以使用常规对象或 Map
const cityMap = new Map(cities.map(city => ([city.name, city]));
用法:
// returns undefined or city object
const cityDetails = cityMap.get(currentAddress.city.name)
我得到一个包含大约 1500 个元素的 cities
数组。
我正在循环获取特定城市:
cities.find(city => city.name === currentAddress.city.name)
也就是O(n)
有没有比每次遍历所有 1500 个元素更有效的方法?
find() 在遇到匹配项时会中断。所以这真的归结为你需要多长时间进行一次搜索。如果您经常这样做,请创建一个使用城市名称作为键的哈希图,以允许 O(1) 查找。您可以使用常规对象或 Map
const cityMap = new Map(cities.map(city => ([city.name, city]));
用法:
// returns undefined or city object
const cityDetails = cityMap.get(currentAddress.city.name)