繁体   English   中英

如何使用javascript使用不区分大小写的搜索从JSON返回结果?

[英]How to return a result from JSON with case insensitive search using javascript?

我的JSON包含“产品”,每个产品都有多个值(名称,制造商等)

我有以下代码,该代码可让我根据从查询字符串获取的搜索结果从JSON中提取“产品”。 它可以正常工作,但前提是搜索条目的格式必须与在字符串中的编写方式完全相同。

如何允许不区分大小写的搜索产生期望的结果(理想情况下是部分搜索)?

我相信正则表达式是可行的方法,但是我已经用尽了我所有的知识,而且似乎对此一无所知。

我试图摆弄小提琴,但无法正常进行演示,因此,我尝试合并代码并对其进行注释以使其清晰。 任何帮助将不胜感激 :)

解析JSON:

var prodobjects = JSON.parse(prods);

根据特定价值获取产品的代码:

function getData(array, type, val) {
  return array.filter(function (el) { 
    return el[type] === val;
  });
}

检索查询字符串的代码:

function gup( name ){
name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");  
var regexS = "[\\?&]"+name+"=([^&#]*)";  
var regex = new RegExp( regexS );  
var results = regex.exec( window.location.href ); 
 if( results == null )    return "";  
else    return results[1];}

我要使用的查询字符串部分:

var prodresult = gup( 'search' );   

删除加号并替换为空格:

var removeplus = prodresult.replace(/\+/g, ' ');

编译产品名称与“搜索”查询相匹配的产品名称:

var searchname = getData(prodobjects.products, 'Prodname', removeplus);

根据要求,这里是一个JSON示例。 它仍在开发中,因此当前正在计算null值等(通过api接收)。 这只是产品之一,但实际的字符串包含许多相同的格式(但在“产品”中):

var prods = JSON.stringify({"products": [
    {
        "Prodname": null,
        "Oem": "Example OEM",
        "Snippet": "Example Snippet",
        "Linkto": "www.linkhere.com",
        "Imagesource": "image.png",
        "Category": "Category",
        "Tagline": "Tagline goes here",
        "Longdescription": [
            {
                "Paragraph": "<p>First description of the paragraph</p>"
            },
            null,
            null,
            null
        ],
        "Features": null,
        "Company": false,
        "Subscribed": false,
        "Tariffs": [
            {
                "Tarname": "Tariff one",
                "Tarpaysched": "Monthly per User",
                "Tarcost": "£1"
            },
            null,
            null,
            null,
            null,
            null
        ],
        "Extratariffs": null
    }
]
});

-更新-

我设法通过以下方法使其能够支持部分搜索和不区分大小写:

function getData(array, type, val) {
  return array.filter(function (el) {
      if (el[type]!=null && val!=null) {
          var seeker = val.toLowerCase();
          var rooted = el[type].toLowerCase();
          var boxfresh = rooted.indexOf(seeker);
          if (boxfresh!=-1) {
              return rooted
          }
      }
  });
}

您可以将两个字符串转换为小写(或大写)以使比较不区分大小写。

function getData(array, type, val) {
  return array.filter(function (el) { 
    return el[type].toLowerCase() === val.toLowerCase();
  });
}

为了更好地进行搜索,您可能需要研究模糊比较 ,即“对数据进行搜索以确定可能的拼写错误和近似的字符串匹配”。

暂无
暂无

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

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