繁体   English   中英

如何使用underscore.js从JSON文件获取/过滤所有结果

[英]How to get/filter all results from JSON file with underscore.js

我有这个( 缩短了问题 )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,Underscore。 如果不需要Underscore,我可以告诉我如何修改我的代码,以便在“product”值包含搜索词时获得更多结果。

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

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

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

我可能会说这不需要下划线(不是最佳包含整个js库只需使用单个函数)。 仅使用JavaScript搜索文本永远不会有趣。 你可能最好编写一些循环结果集的regex函数并尝试匹配一些文本。

如果可能的话,我会尝试在服务器端实现搜索功能,并在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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM