2013-09-12 3 views
0

У меня есть следующие данные: JSonФильтрация JSON атрибутом

"unit 251":{ 
     "path":"M256.57 475.46L251.00 478.71L248.15 478.14L245.46 474.81L253.62 468.11L254.07 467.73L256.10 470.18L256.12 470.20L257.48 470.41L257.48 470.41L258.49 471.59L259.64 472.92", 
     "name":"unit 251", 
     "status":"Avaliable", 
     "color":"#006738", 
     "size":"3200", 
     "price":"300 000" 
    } 

Намного больше, хотя ... И мне нужно в JQuery добавить класс доступен, для того, чтобы мне делать, что мне нужно для некоторых, как сортировать массив по статусу. Я сейчас пытаюсь использовать следующий код:

//Filter By Status 
    function filterUnitStatus(unitStatus){ 
     jQuery.grep(json['properties'], function(item){ 
      return item.status == unitStatus; 

     }); 
    } 
    //Filter By Status 

    jQuery('#status').on('change', function(){ 
     var unitStatus = jQuery(this).val(); 
     filterUnitStatus(unitStatus); 
    }); 

Но я не знаю, что я делаю.

Любая больш оцененная

+0

что #status? можете ли вы предоставить скрипку с небольшим количеством рабочего кода? www.jsfiddle.net – BeNdErR

+0

okay сделает ... –

+0

'return'' jQuery.grep', так как это возвращает массив. На данный момент эта функция ничего не возвращает. – tymeJV

ответ

1

Вы не возвращает ничего из вашей функции, то .grep() создать это массив, так что вернуться! Кроме того, .grep() ничего не возвращался, я изменил его на работу на получение JSON объектов ключей и итерация:

//Filter By Status 
function filterUnitStatus(unitStatus){ 
    return jQuery.grep(Object.keys(json), function(item) { 
     return json[item].status == unitStatus; 
    }); 
} 

Демо: http://jsfiddle.net/ntTTp/

+0

как бы я увидел эти данные? –

+0

im doing: console.log (filterUnitStatus (unitStatus)); но я получаю [] –

+0

Тогда ваш '.grep' ничего не возвращает. – tymeJV

0

Ваша функция фильтра ничего не возвращать в первый, изменить его в

function filterUnitStatus(unitStatus){ 
    return jQuery.map(obj, function(el){ 
     if (el.status == unitStatus) return el; 
    }); 
} 

jQuery.grep() принимает только вещественные массивы в качестве аргументов. Вместо этого используйте jQuery.map(). Это будет проходить через массивы или объекты и возвращать массив со всеми соответствующими объектами .

Решение, предоставленное tymeJV, содержит все имена совпадающих объектов, которые, по-видимому, были нужны OP. Тот же результат может быть достигнут путем модификации выше, чтобы

function filterUnitStatus(unitStatus){ 
    return jQuery.map(obj, function(el,id){ 
     if (el.status == unitStatus) return id; 
    }); 
} 

Теперь возвращаемый массив будет содержать только подобранные ключи.

Смотрите здесь: http://jsfiddle.net/ntTTp/2/

+0

похоже, что я был вторым слишком медленным ;-) – cars10m

+0

как бы я увидел эти данные? –

+0

im doing: console.log (filterUnitStatus (unitStatus)); но я получаю [] –

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