javascript - 如何高效地搜索 JSON 数组

标签 javascript jquery arrays json

下面的代码工作正常:

var stores = new Array();
stores[0] = { ItemNumber: "2001", Code: "001", Qty: "1", OH: "1" };
stores[1] = { ItemNumber: "2002", Code: "002", Qty: "3", OH: "2" };
stores[2] = { ItemNumber: "2003", Code: "003", Qty: "5", OH: "8" };
stores[3] = { ItemNumber: "2001", Code: "004", Qty: "10", OH: "90" };

var item = "2001";
var code = "001";

var searchResult = jQuery.grep(stores, function (store, indexInArray) {
    var found = false;
    if (item != "" && code != "") {
        found = (store.Code == code) && (store.ItemNumber == item);
    }
    else if (item != "" && code == "") {
        found = (store.ItemNumber == item);
    }
    else if (code != "" && item == "") {
        found = (store.Code == code);
    }
    return found;
});

$.each(searchResult, function (index, obj) {
    console.log("found: " + obj.Code);
});

JSFiddle:http://jsfiddle.net/hwpnbkm3/

但是我对代码不太满意,因为有太多的 if/else 语句。另外,如果我想按数量或 OH 搜索,那么它会变得更加复杂。有没有一种方法可以在不使用多个 if/else 语句的情况下搜索该数组?我可以构建一个动态查询来搜索数组吗?

最佳答案

您的函数可以简化为:

return (item == "" || store.ItemNumber == item) &&
       (code == "" || store.Code == code) &&
       (item != "" || code != "");

但我建议的是:不要为查询使用单独的变量,而是创建一个对象。

var stores = new Array();
stores[0] = { ItemNumber: "2001", Code: "001", Qty: "1", OH: "1" };
stores[1] = { ItemNumber: "2002", Code: "002", Qty: "3", OH: "2" };
stores[2] = { ItemNumber: "2003", Code: "003", Qty: "5", OH: "8" };
stores[3] = { ItemNumber: "2001", Code: "004", Qty: "10", OH: "90" };

var query = { ItemNumber: "2001", Code: "001" };

var searchResult = jQuery.grep(stores, function (store, indexInArray) {
    var found = false;
    for(var n in query) {
      if(query[n] != "") {
        if(query[n] != store[n]) {
          found = false;
          break;
        }
        found = true;
      }
    }
    return found;
});

$.each(searchResult, function (index, obj) {
    console.log("found: " + obj.Code);
});

关于javascript - 如何高效地搜索 JSON 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25691155/

相关文章:

Python - 从 numpy 数组中删除一行?

javascript - 通过查找图像 alt 添加图像 ID

javascript - getDerivedStateFromProps 未在 React Native 中调用

javascript - PHP 可在 PHP Fiddle 中运行,但不能在浏览器中运行

javascript - PJAX 和 CSS 转换

javascript - 如何使用 jQuery 和 ajax 仅使用新值或更改值更新表?

javascript - 当我有多个元素时,多选 Lookup onChange 事件不会触发

javascript - jQuery 不工作(ReactJS、Bootstrap、Webpack)

javascript - 在 d3.js 中从 CSV 中选择一段数据

java - 如果在控制台中输入非数字,如何使程序继续运行