2014-02-21 1 views
0

Этот вопрос состоит из двух частей: во-первых, я хочу создать массив, который работает как таблица. Он будет иметь две колонки ids (Game-Id и Game-Name). Я работаю в чем-то вроде этого:Javascript Найти строку в таблице, подобной массиву

var game_list = 
    [ 
    {id:1, name:'Vampires hunter'}, 
    {id:2, name:'Christmas vampires'}, 
    {id:3, name:'Fruit hunter'}, 
    {id:4, name:'The fruitis'}, 
    {id:5, name:'james bond'}, 
    {id:6, name:'Vampires hunter'}, 
    {id:7, name:'Vampires avalon'}, 
    {id:8, name:'Vampires warrior'}, 
    {id:9, name:'Vampires hunter'}, 
    {id:10, name:'Vampires hunter'}, 
    ]; 

Но я не в состоянии получить доступ к элементам в этом виде массива/объекта, даже не document.write элемента.

Мне нужно создать функцию, которая будет искать определенную строку внутри этого массива. Функция будет иметь 2 параметра (строку и массив), и это даст нам результат массива элементов с именами игр и идентификаторами, которые соответствуют этой строке.

+0

Использование Array.prototype.filter с obj.name.indexOf (поиск) в вашем возвращении заявления. –

ответ

0

Простой цикл и проверка будет делать:

function checkArray(name) { 
    var arr = []; 
    for (var i = 0; i < game_list.length; i++) { 
     if (game_list[i].name == name) 
      arr.push(game_list[i]) 
    } 
    return arr; 
} 

сравнит name прошел в с name каждого объекта, и возвращает массив соответствующих объектов. Если вы хотите только имена, содержащие переданному в строке, используйте indexOf и проверить -1

2

Использование filter:

function filter(arr, string) { 
    return arr.filter(function (el) { 
    return el.name === string; 
    }); 
} 

filter(game_list, 'Vampires avalon'); // [{ id=7, name="Vampires avalon"}] 

Demo

Если вы хотите быть действительно умный, добавить регулярное выражение соответствуют строке в любом месте в названии:

function filter(arr, string) { 
    var regex = new RegExp('.*' + string + '.*'); 
    return arr.filter(function (el) { 
    return regex.exec(el.name); 
    }); 
} 

filter(game_list, 'hunter'); 

, который даст вам следующее:

[{"id":1,"name":"Vampires hunter"},{"id":3,"name":"Fruit hunter"},{"id":6,"name":"Vampires hunter"},{"id":9,"name":"Vampires hunter"},{"id":10,"name":"Vampires hunter"}] 

Demo

+0

Ницца, мне это нравится лучше, чем у меня! – tymeJV

+0

спасибо @Andy, он не работает с этим: var game_list = { 1: {имя: 'Vampires hunter', описание: «Лучшая игра вампиров в мире»}, 2: {name: «Рождественские вампиры», описание: «Лучшая игра вампиров в мире»}, 3: {name: «Fruit hunter», описание: «Лучшая игра вампиров в мире»}, 4: {name: 'The fruitis', description: 'The лучшие игры вампиров в мире '}, 5: {имя:' james bond ', описание: «Лучшая игра вампиров в мире»} }; Im получение этой ошибки: return arr.filter (function (el) { – Lowtrux

+0

[См. Здесь для получения дополнительной информации о том, как выводить данные на страницу.] (Http://jsfiddle.net/YyfWJ/23/). не использовать 'document.write', это считается плохой практикой. – Andy

Смежные вопросы