javascript - 有效评估 JavaScript 对象是否包含字符串

标签 javascript arrays object evaluation

我有以下示例客户端对象:

var obj = {
"locations": [
    [
        37.502917,
        -122.501335
    ],
    [
        37.494473,
        -122.499619
    ],
    [
        37.484394,
        -122.455673
    ]
],
"types": [
    [
        "type1"
    ],
    [
        "type2"
    ],
    [
        "type3"
    ]
    ]
};

位置最多可包含 50 个值。 ajax 请求返回一组新位置,我需要评估它们是否已经在 obj.locations 内。每个新返回的位置都是一个字符串,例如:

var test = 37.502917 + ',' + -122.501335;

对于每个位置,我可以迭代当前位置并检查它是否存在:

for(var i = 0; i < obj.locations.length; i++) {
    if(obj.locations[i] == test){
        console.log('Found!');
    }
}

是否有更有效的方法来执行此操作,因为为每个新位置迭代对象似乎效率低下?

<小时/>

编辑:我的解决方案:

我决定将位置对象转换为字符串,然后评估每个传入的字符串:

var test = -121.60183 + ',' + 38.025783;
var cords = [].concat([], obj.locations).toString();
if( cords.indexOf(test) !== -1) {
    console.log('found!  ');
}

最佳答案

这可能是计算机科学中最古老的问题之一——查找一些东西。

你首先要问自己这是否值得担心。使用线性搜索可能需要 1 毫秒才能找到位置,但使用某种优化搜索则需要 0.5 毫秒。那么,值得这么麻烦吗?

下一个方法是对位置列表进行排序,并对其进行二分搜索。

另一种方法是创建某种哈希表。为此,您可以使用 JavaScript 对象,并将属性作为哈希键。最简单的方法是使用lat+long作为属性键,但现在您只是将效率问题转移到JS在大对象中查找键的效率上。

您可以设计自己的自定义散列式方法,其中具有相同纬度整数部分的所有位置都存储为散列值 37 下的数组。然后,性能由在表,然后查看其数组中较少数量的位置。

更进一步,如果性能确实是一个问题,您可以构建某种树结构以实现最佳查找。在某些时候,您必须开始在构建和更新树的成本与使用树查找内容所节省的成本之间进行权衡。

关于javascript - 有效评估 JavaScript 对象是否包含字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25703367/

相关文章:

javascript - 未显示/使用 Google map 时出现控制台错误

javascript - React 从本地存储导入图像

javascript - 如何从对象中获取数组的数量

javascript - 检查互联网连接并更改内容 jquery/Javascript

javascript - 导入模块而不导出或在文件内使用的目的是什么

arrays - 当您将 array[index] 设置为等于引号时,这意味着什么?

php - 在 php 中增加不初始化数组值

java - 2D 字符串数组转换为 2D Int 数组

javascript - 如何使用变量访问 javascript 对象方法?

javascript - 在窗口上定义一次单击监听器和在元素上定义多次单击监听器之间有什么显着差异吗?