【发布时间】:2021-03-26 16:13:06
【问题描述】:
我目前正在学习如何使用搜索和排序算法,并且在对一组客户数据对象进行二进制搜索时遇到了问题。客户数组按名字和姓氏排序。
目标是找到客户的电子邮件并返回索引。
数据如下:
[
{
"username": "Maude.Torp",
"email": "Taya.Kerluke53@gmail.com",
"address": {
"street": "Rowe Fields",
"suite": "Suite 231",
"city": "Tiannamouth",
"zipcode": "07584-6653",
"geo": { "lat": "75.0283", "lng": "-17.1824" }
},
"phone": "795-827-5446 x18366",
"website": "nico.com",
"company": {
"name": "Champlin, Feest and Barrows",
"catchPhrase": "Object-based user-facing orchestration",
"bs": "transition integrated content"
},
"firstName": "Maida",
"lastName": "Feeney"
},
...
]
我的二分查找函数如下:
function searchByEmail(email, customers) {
let start = 0;
let end = customers.length - 1;
while (start <= end) {
let middle = Math.floor((start + end) / 2);
if (customers[middle] === email) {
return middle;
} else if (customers[middle] < email) {
start = middle + 1;
} else {
end = middle - 1;
}
}
return -1;
}
在已排序的数字数组上,我能够返回所需键的索引。
let customers = [1, 10, 45, 56, 66, 567]
...
console.log(searchByEmail(66, customers))
// --> 4
当我查看这个对象数组时,我只返回 -1。如何更改此算法以适用于数组中的对象?
【问题讨论】:
-
客户数组是否按电子邮件地址排序?这就是您需要能够对电子邮件进行二分搜索。
-
对,和我要说的一样:)
-
另请注意,如果您从数据库中获取了这么大的数组,您可能希望使用一些过滤器对其进行查询,而不是检索所有客户,然后从完整列表中查找一个或多个
-
@Zorgatone 太棒了,我很感激。你帮了大忙!
-
@alexwhit 不客气
标签: javascript arrays object binary-search-tree