0

我有一个对象数组,其中有一个键PhoneNumber(以及其他键值对)。我有一个要在此数组中查找的电话号码值。我在此数组上执行电话号码的线性搜索,并在找到对象后立即中断循环(因此,如果我很幸运,我可能不需要遍历整个数组)。

最好的情况是我在 Array 中找到电话号码(并且不要进一步搜索),但我找不到它的可能性更大,并且会徒劳地遍历整个数组。

更新

我想提供这个,搜索空间(对象数组)将有大约 500 个元素,因此专门查看此线性搜索可能不是性能问题,但还有许多其他任务与此搜索一起执行,所以我正在寻找尽可能多的微优化。

更新 2(回应Elias Van Ootegem评论

我认为我的 Array 的结构有一些不合适的地方,因此JSON.stringify()(Uncaught TypeError: Converting circular structure to JSON) 或Ext.JSON.encode()(Maximum call stack exceeded) 都不能将数组转换为 JSON 字符串。

但是,无论如何要更快地做到这一点?

4

2 回答 2

0

它取决于使用情况。

如果多次使用此数组,则应使用映射而不是数组。使用 {key: data} 创建一个散列,并获取给定其键的数据。(将数组转换为 javascript 中的哈希)

如果只使用一次数组,将其转换为地图的过程将比搜索本身花费更长的时间。最好的方法,线性搜索。

两种解决方案的成本是(考虑 n:数组长度和 m,搜索次数):第一个解决方案:n*log(n) + m * log(n)

秒解:n*m

于 2013-02-26T11:09:33.243 回答
0

创建一个查找对象,它将电话号码(作为键)映射到数组内的索引。

var dataset = [{phone:'0123 456 689'},{phone:'0987 654 321'},...];
var lookup = {'0123 456 689':0,'0987 654 321':1,...};

// search like this...

var number = '0987 654 321';
var obj = dataset[lookup[number]];

但这对于大多数用例来说可能是多余的,因为即使有数千个条目,线性搜索对于用户来说也应该足够快。

于 2013-02-26T11:09:42.063 回答