【问题标题】:How do I create a search which looks for matching data in an array?如何创建在数组中查找匹配数据的搜索?
【发布时间】:2012-06-27 16:50:14
【问题描述】:

我想创建一个搜索框来检查输入并查看它是否与城镇名称匹配。

我的数据是这样组织的(顺便说一句,虚构数据):

var markers = {
    towns: {
        "London": {lat: -83.68088192646843, lng: -125.270751953125},
        "Paris": {lat: -58.1548020417031, lng: -21.318115234375},
    }
}

所以澄清一下:

  • 接受文本框输入,var query
  • 搜索城镇,var results
  • if (query === results) 做一些事情,例如发出警报

谢谢。

编辑:

我已经能够进行如下测试:

$("#search").blur(function() {
    var query = $("#search").val();
    var results = "hi";
    if (query === results) {
        alert("booyah");
    }   
})

这可行,但是正如您所见,我不知道如何将城镇存储在var results

编辑#2:这行得通吗?

$("#search").blur(function() {
    var query = $("#search").val();
    for (var town in markers.towns) {
        if (query !== markers.towns[town]) {
            alert("booyah");
        }           
    }
})

【问题讨论】:

  • 这是一个非常具体的说明(即答案材料)。你确定你不能自己解决这个问题吗?
  • 我不确定循环遍历数组然后检查答案的语法。此外,每当我尝试存储查询时,它都不起作用。我进行了var query = $("#search").val() 等测试,然后尝试alert(query)。我尝试过的其他方法涉及search.value,但没有任何效果。
  • @musefan 查看我对原始问题所做的编辑。
  • 对于编辑 2:尝试if (markers.towns[query])

标签: javascript jquery json twitter-bootstrap


【解决方案1】:

首先,您的对象不是数组。 这种情况可能很简单:

var coordinates = (function () {
    var markers = {
        towns: {
            "London": {lat: -83.68088192646843, lng: -125.270751953125},
            "Paris": {lat: -58.1548020417031, lng: -21.318115234375},
        }
    };
    return {
        find = function (city) {
             markers.towns[city] || null;
        }
    };
})();

find 方法将返回您的值对象或 null。

【讨论】:

  • 有没有办法使用我当前的对象结构,你能向我解释一下 find 功能吗?我是对象和 json 等的新手。
【解决方案2】:

当我使用硬编码的查询变量运行以下命令时,它可以正常工作:

var markers = {
    towns: {
        "London": {lat: -83.68088192646843, lng: -125.270751953125},
        "Paris": {lat: -58.1548020417031, lng: -21.318115234375}
    }
}

var query = "london";   // Test with different capitalization.
for (var town in markers.towns) {
    // If the current town name matches the input field (case insensitive)
    if (town.toLowerCase() === query.toLowerCase()) {
        alert("booyah");
    }
}

【讨论】:

  • 不幸的是,这不起作用。查询部分很好,但不是循环或比较。
  • 我已经在 jsfiddle (jsfiddle.net/sYCfx) 中对此进行了测试,它确实有效。虽然当我使用它时,地图不再加载。我想不出为什么。
  • 我已经弄清楚了,我需要将搜索放在与标记对象相同的函数中。谢谢!
猜你喜欢
  • 2021-09-12
  • 1970-01-01
  • 1970-01-01
  • 2020-06-01
  • 2021-11-16
  • 2019-09-16
  • 1970-01-01
  • 1970-01-01
  • 2021-08-29
相关资源
最近更新 更多