【问题标题】:How to get/filter all results from JSON file with underscore.js如何使用 underscore.js 从 JSON 文件中获取/过滤所有结果
【发布时间】:2013-12-05 17:18:53
【问题描述】:

我有这个(问题缩写)JSON 文件:

[
  {
   "product":"aardappelen gebakken",
   "quantity":"100gr",
   "carbohydrates":"19,3"
  },
  {
   "product":"aardappelen pikant",
   "quantity":"100gr",
   "carbohydrates":"3"
  },

  {
   "product":"aardappelmeel",
   "quantity":"100gr",
   "carbohydrates":"80"
  }
]

我想做的是:

搜索产品,然后搜索其所有内容,例如当我搜索“aardappelmeel”时,我得到产品、数量和碳水化合物键值,我使用以下代码执行此操作:

搜索词暂时是硬编码的,这将是一个 var 以后的。

$(function() {

    $.getJSON( "js/data.json").fail(function(jqxhr, textStatus, error) {
    var err = textStatus + ", " + error;
    console.log( "Request Failed: " + err );
    }).done(function(data) {
    var carbohydratesResult = getCarbohydrates(data, 'aardappelmeel');
    console.log(carbohydratesResult);
  });

});

function getCarbohydrates(arr, searchTerm){
  var result;
  if(searchTerm === '') {
    result = 'No searchterm';
  }
  else {
    result = _.where(arr, {product: searchTerm});
  }
 return result;
}

这得到 1 个结果:

问题:当我搜索“aardappelen”时,我没有得到任何结果,它应该是 2,因为有 2 个产品包含名称“aardappelen”。我该怎么做?

我使用 jQuery,下划线。如果不需要下划线,我很好,请告诉我如何修改我的代码以在“产品”值包含搜索词时获得多个结果。

【问题讨论】:

标签: javascript jquery json underscore.js


【解决方案1】:

您需要_.filterindexOf 来进行子字符串搜索:

result = _.filter(arr, function(item) {
    return item.product && item.product.indexOf(searchTerm) != -1;
});

请注意,_.where 执行完全匹配。

【讨论】:

  • 您链接到indexOf 以获得数组。我相信每个浏览器都支持indexOf for strings
  • @FelixKling 哦,谢谢。没错,indexOf 是在 Javascript 1.0 中实现的。
【解决方案2】:

我可能会说这不需要下划线(包含整个 js 库只是使用单个函数不是最佳选择)。简单地在 JavaScript 中搜索文本从来都不是一件有趣的事。您可能最好编写一些正则表达式函数,循环遍历您的结果集并尝试匹配某些文本。

如果可能,我会尝试在服务器端实现搜索功能,并在 ajax 请求中返回这些结果。

JS 解决方案的粗略示例...

var searchText = 'blah',
    matches = [];
for(var i = 0; i < results.length; i++) {
    var reg = new RegExp(searchText);
    if(results[i].product.match(reg)) matches.push(results[i]);
}

return matches;

【讨论】:

    猜你喜欢
    • 2017-10-19
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多