Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果存在任何匹配,则两个数组(一个嵌套数组和一个平面数组)上的JavaScript部分匹配应返回true_Javascript_Jquery_Arrays_Regex - Fatal编程技术网

如果存在任何匹配,则两个数组(一个嵌套数组和一个平面数组)上的JavaScript部分匹配应返回true

如果存在任何匹配,则两个数组(一个嵌套数组和一个平面数组)上的JavaScript部分匹配应返回true,javascript,jquery,arrays,regex,Javascript,Jquery,Arrays,Regex,我需要通过给定数组“results”的每个节点进行部分匹配。匹配需要解析原始输入字段中由空格分隔的每个字符串。以下是我基本需要的样本请不要使用插件 我有两组数组:结果列表数组和输入字段数组,假设: 如果输入搜索词:“ABC pa 2014”-我现在将其存储在一个数组中,以便使用indexOf。但是,它匹配每个空格分隔项的完整字符串 结果列表数组: [ { "sIndex": 0, "sItem": { "cName": "ABC Partners",

我需要通过给定数组“results”的每个节点进行部分匹配。匹配需要解析原始输入字段中由空格分隔的每个字符串。以下是我基本需要的样本请不要使用插件

我有两组数组:结果列表数组和输入字段数组,假设:

如果输入搜索词:“ABC pa 2014”-我现在将其存储在一个数组中,以便使用indexOf。但是,它匹配每个空格分隔项的完整字符串

结果列表数组:

[
  {
    "sIndex": 0,
    "sItem": {
      "cName": "ABC Partners",
      "cId": 0
    }
  },
  {
    "sIndex": 1,
    "sItem": {
      "cName": "ABC Partners",
      "cId": 0,
      "pName": "[ABC] ABC Description",
      "pTick": "ABC",
      "pId": 0,
      "dName": "[2014] ABC Db",
      "dYear": [
        "2014"
      ],
      "dId": 0
    }
  },
  {
    "sIndex": 2,
    "sItem": {
      "cName": "ABC Partners",
      "cId": 0,
      "pName": "[ABC] ABC Description Two",
      "pTick": "ABC",
      "pId": 0,
      "dName": "[2014] ABC Db",
      "dYear": [
        "2014"
      ],
      "dId": 0
    }
  },
用于测试目的的完整阵列:

[{"sIndex":0,"sItem":{"cName":"ABC Partners","cId":0}},{"sIndex":1,"sItem":{"cName":"ABC Partners","cId":0,"pName":"[ABC] ABC Partners","pTick":"ABC","pId":0}},{"sIndex":2,"sItem":{"cName":"ABC Partners","cId":0,"pName":"[ABC] ABC Partners","pTick":"ABC","pId":0,"dName":"[2009] ABC Partners DB","dYear":"2009","dId":0}},{"sIndex":3,"sItem":{"cName":"ABC Partners","cId":0,"pName":"[ABC] ABC Partners","pTick":"ABC","pId":0,"dName":"[2009] Scenario 1 DB","dYear":"2009","dId":1}},{"sIndex":4,"sItem":{"cName":"ABC Partners","cId":0,"pName":"[ABC] ABC Partners","pTick":"ABC","pId":0,"dName":"[2009] Scenario 1 ExpResults DB","dYear":"2009","dId":2}},{"sIndex":5,"sItem":{"cName":"ABC Partners","cId":0,"pName":"[ABC] ABC Partners","pTick":"ABC","pId":0,"dName":"[2009] Scenario 2 DB","dYear":"2009","dId":3}},{"sIndex":6,"sItem":{"cName":"ABC Partners","cId":0,"pName":"[ABC] ABC Partners","pTick":"ABC","pId":0,"dName":"[2009] Scenario 2 ExpResults DB","dYear":"2009","dId":4}},{"sIndex":7,"sItem":{"cName":"ABC Partners","cId":0,"pName":"[ABC] ABC Partners","pTick":"ABC","pId":0,"dName":"[2009] Scenario 3 BaseDB","dYear":"2009","dId":5}},{"sIndex":8,"sItem":{"cName":"ABC Partners","cId":0,"pName":"[ABC] ABC Partners","pTick":"ABC","pId":0,"dName":"[2009] Scenario 3 DB","dYear":"2009","dId":6}},{"sIndex":9,"sItem":{"cName":"ABC Partners","cId":0,"pName":"[ABC] ABC Partners","pTick":"ABC","pId":0,"dName":"[2009] Scenario 3 ExpResults DB","dYear":"2009","dId":7}},{"sIndex":10,"sItem":{"cName":"ABC Partners","cId":0,"pName":"[ABC] ABC Partners","pTick":"ABC","pId":0,"dName":"[2009] Scenario 4 DB","dYear":"2009","dId":8}},{"sIndex":11,"sItem":{"cName":"ABC Partners","cId":0,"pName":"[ABC] ABC Partners","pTick":"ABC","pId":0,"dName":"[2009] Scenario 4 ExpResults DB","dYear":"2009","dId":9}},{"sIndex":12,"sItem":{"cName":"ABC Partners","cId":0,"pName":"[ABC] ABC Partners","pTick":"ABC","pId":0,"dName":"[2009] Scenario 5 DB","dYear":"2009","dId":10}},{"sIndex":13,"sItem":{"cName":"ABC Partners","cId":0,"pName":"[ABC] ABC Partners","pTick":"ABC","pId":0,"dName":"[2009] Scenario 5 ExpResults DB","dYear":"2009","dId":11}},{"sIndex":14,"sItem":{"cName":"ABC Partners","cId":0,"pName":"[ABC] ABC Partners","pTick":"ABC","pId":0,"dName":"[2010] Scenario 6 DB","dYear":"2010","dId":12}},{"sIndex":15,"sItem":{"cName":"ABC Partners","cId":0,"pName":"[ABC] ABC Partners","pTick":"ABC","pId":0,"dName":"[2010] Scenario 6 ExpResults DB","dYear":"2010","dId":13}},{"sIndex":16,"sItem":{"cName":"ABC Partners","cId":0,"pName":"[ABC] ABC Partners","pTick":"ABC","pId":0,"dName":"[2009] Scenario 7 DB","dYear":"2009","dId":14}},{"sIndex":17,"sItem":{"cName":"ABC Partners","cId":0,"pName":"[ABC] ABC Partners","pTick":"ABC","pId":0,"dName":"[2009] Scenario 7 ExpResults DB","dYear":"2009","dId":15}},{"sIndex":18,"sItem":{"cName":"ABC Partners","cId":0,"pName":"[ABC] ABC Partners","pTick":"ABC","pId":0,"dName":"[2009] Scenario 8 BaseDB","dYear":"2009","dId":16}},{"sIndex":19,"sItem":{"cName":"ABC Partners","cId":0,"pName":"[ABC] ABC Partners","pTick":"ABC","pId":0,"dName":"[2009] Scenario 8 DB","dYear":"2009","dId":17}},{"sIndex":20,"sItem":{"cName":"ABC Partners","cId":0,"pName":"[ABC] ABC Partners","pTick":"ABC","pId":0,"dName":"[2009] Scenario 8 ExpResults DB","dYear":"2009","dId":18}}]
函数应该返回第二个和第三个节点

如果输入搜索词:“ABC pa”,则函数应返回所有三个节点

很抱歉,这个问题很简短,如果您有任何帮助,我们将不胜感激。

步骤
  • 按空格将搜索输入拆分为单词数组
  • 使用该方法筛选源阵列
  • 循环浏览源数组每个项的
    sItem
    属性,并:
    • 查看属性是否为
      字符串,以及是否为true
      
      • 循环搜索单词,查看是否在该属性中找到它们
  • 如果在属性中找到了所有单词,则将true返回到
    过滤器
    方法
代码


您将搜索输入与什么进行比较?cName还是pName?因为第一个fresult没有pName,第二个和第三个结果的pName中只有“2014”,但第二个结果不包含“Partners”。因此,我不知道您想如何将“ABC pa 2014”与第二条和第三条记录相匹配。为什么
“ABC pa 2014”
与第二条和第三条记录相匹配,而不是第一条记录?据推测,2014年以来不在其中,但我假设atm问题中存在缺陷。一个非常简单的解决方案:。但我想您需要使用JSON解析器。@不好意思,我已经更新了JSON。我想首先匹配:cName和dYear,如果这不存在,我想匹配pTick和dYear。然后,我想通过任何给定的排列进行匹配。在返回第二个和第三个之后,我将返回第三个(and或rest)。但是,当我搜索“2009”时,也会返回“2010”。建议?我有一个pYear 2010和2009的数据集。@XiaoKan也用这些值编辑你的问题,这样我就可以在这里测试它们,看看发生了什么。而且,如果我的答案对你有用,即使它不是你所需要的,你至少可以投票:)对不起,我试图投票,但仍然是这个网站的新手,不让我。但是,我会确保这一点得到支持:)。谢谢@这是因为我在
filter
方法之外创建
found
数组,然后在另一次迭代中保持它的值。我已将其位置更改为方法内部,现在一切正常!我已经编辑了我的答案,所以你可以检查它!请,如果对你有用的话,你可以把答案标记为已接受的答案。非常感谢。非常感谢你。这真是太棒了。我已表示接受我的回答。我还有一个要求。而不是我将返回的数组排序到该函数之外。在返回数组之前,是否可以按数组中的dName降序对数组进行排序?你的帮助是无价的!
function search(val) {
  val = val.split(' '); // Step 1
  var filtered = arr.filter(function(item) { // Step 2
    var found = []; // Array to save how many words were found
    for (var prop in item.sItem) { // Step 3
      if (typeof item.sItem[prop] === 'string') { // Step 3.1
        for (var i = 0; i < val.length; i++) { // Step 3.1.1
          // Look if the current property has any of the words of the search input
          if (item.sItem[prop].toLowerCase().indexOf(val[i].toLowerCase()) >= 0) {
            found[i] = true; // if found, save to the found array
          }
        }
      }
    }

    // if the true values of the found array has the same length of the input search array
    return found.filter(function(expr) { return expr; }).length == val.length; // Step 4
  });

  // sort the filtered array by the dName property and return it
  return filtered.sort(function(a, b) {
    return b.sItem.dName > a.sItem.dName;
  });
}