2012-02-26 53 views
1

請有人可以幫助我嗎?我是jQuery的新手。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"] 
]; 

我想一個jQuery功能,可以通過「classicCars」迭代陣列(僅在部分搜索[1][2],汽車名稱車主名稱),並返回相應的年份和汽車的名稱和車主,使用部分字符串。因此,例如,美其名曰:

findCars("Porsche"); 

應返回:

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

此外,findCars()函數將返回超過10項。如果下面的函數被稱爲:

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中的多維數組中進行部分搜索。

謝謝。

回答

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/

+0

謝謝MTDK,我的問題是會做一個**部分**搜索,所以_「或」_將調出_「福特」_和_「羅蘭」_? – Cassy 2012-02-26 09:05:41

+0

對不起,但您的代碼無法正常工作。看到這裏:[鏈接](http://jsfiddle.net/QtkAf/) – Cassy 2012-02-26 09:26:45

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(''); 
    }; 
}()); 

我使用了一個把手模板:

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

用法:

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

現場演示:http://jsfiddle.net/yLcmZ/