jQuery - 通过多维数组进行部分查询搜索

时间:2012-02-26 08:47:27

标签: jquery search multidimensional-array partial

有人可以帮帮我吗?我是jQuery的新手。

我有一个如下所示的数组:

//classcCars = [Year,  Car Name,  Owner's Name]
var classcCars = [
    [1927, "Ford Model T", "Brian"],
    [1969, "Corvette Sting Ray", "Larry"],
    [1967, "Ford Mustang", "John"],
    [1969, "Camaro SS", "Samantha"],
    [1967, "Volkswagen Beetle"],
    [1964, "Porsche 911", "Michael"],
    [1962, "Maserati 3500", "Loren"],
    [1967, "Ford GT40", "Sarah"]
];

我想要一个可以遍历“classicCars”数组的jQuery函数(仅在 [1] [2]中搜索] 汽车名称所有者姓名)并使用部分返回相应的年份和汽车名称以及汽车所有者串。例如,调用:

findCars("Porsche");

应该返回:

<p>Michael Porsche 911 - 1964</p>

此外,findCars()函数应返回多个条目。如果调用以下函数:

findCars("or");

以下内容应该返回:

<p>Brian owns a Ford Model T - 1927</p>
<p>Larry owns a Corvette Sting Ray - 1969</p>
<p>John owns a Ford Mustang - 1967</p>
<p>Michael owns a Porsche 911 - 1964</p>
<p>Loren owns a Maserati 3500 - 1964</p>
<p>Sarah owns a Ford GT40 - 1967</p>

有人可以帮助我吗?我不知道如何在jQuery中的多维数组中进行部分搜索。

谢谢。

2 个答案:

答案 0 :(得分:0)

试试这个:

function searchArr( keyword ) {

  var retVal = [];

  for( var i = 0; i < classcCars.length; i++ ) {
    for( var j = 0; j < classcCars[ i ].length; j++ ) {
      if( String( classcCars[ i ][ j ] ).toLowerCase().indexOf( String( keyword ).toLowerCase(), 0 ) != -1 ) {
        retVal.push( classcCars[ i ] );
      }
    }
  }
  return retVal;
}

(对不起以前的错别字)

这只是为了指向正确的方向 - 该函数将返回一个数组,该数组仅包含classcCars数组中包含关键字的元素。

在jsfiddle的例子:http://jsfiddle.net/QtkAf/3/

答案 1 :(得分:0)

下面:

var findCars = (function () {
    function found( str, substr ) {
       return str && substr && str.indexOf( substr ) > -1;
    }

    return function ( arr, term ) {
        return arr.filter( function ( elem ) {
            return found( elem[1], term ) || found( elem[2], term );
        }).map( function ( elem ) {
            return template({ name: elem[2], car: elem[1], year: elem[0] });
        }).join( '' );
    };
}());

我正在使用Handlebars模板:

<script id="template" type="text/x-handlebars-template">
    <p>{{name}} {{car}} - {{year}}</p>
</script>

用法:

var html_string = findCars( classcCars, 'Porsche' );

现场演示: http://jsfiddle.net/yLcmZ/