2015-01-09 5 views
2

Say У меня есть образец JSon данные, такие как:Jquery, где положение на JSon

var data = { 
      "items": [{ 
       "id": 1, 
       "category": ["cat1","cat2"] 
      }, { 
       "id": 2, 
       "category": ["cat1","cat3"] 
      }, { 
       "id": 3, 
       "category": ["cat11","cat2"] 
      }] 
     }; 

Теперь Как вернуть только те данные, которые содержит Cat1

Я попытался с Jquery Grep как

var returnedData = $.grep(data.items, function (element, index) { 
return element.category.indexOf("cat1") == 1; 
}); 

Но это не дает мне правильный результат, который должен возвращать первый и второй объекты.

Спасибо.

+1

'IndexOf()' возвращает Вам * индекс * элемента (начиная с '0') или '-1' если не найден. '1' - это вторая позиция в массиве, и ни один из элементов не имеет' cat1'. –

ответ

3

indexOf возвращает index (0...n - позиция в массиве) или -1, если значение не существует в массиве. Вам необходимо изменить условие, чтобы проверить index на > -1. В вашем варианте вы всегда проверяете index == 1, но cat1 имеет index 0 - вот почему вы получаете пустой результат.

var returnedData = $.grep(data.items, function (element) {  
    return element.category.indexOf('cat1') >= 0; 
}); 

Example

1

Применение Array.filter

var filteredData = data.items.filter(function(item) { 
    return item.category.indexOf("cat1") > -1; 
}); 
Смежные вопросы