jQuery - поиск частичных запросов через многомерный массив - PullRequest
1 голос
/ 26 февраля 2012

Пожалуйста, кто-нибудь может мне помочь?Я новичок в 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 () должна возвращать более 1 записи.Если была вызвана следующая функция:

findCars("or");

Следующее должно получить return:

<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 голосов
/ 27 февраля 2012

Здесь:

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/

0 голосов
/ 26 февраля 2012

Попробуйте:

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, содержащий ключевое слово.

Пример Se в jsfiddle: http://jsfiddle.net/QtkAf/3/

...