Подтвердить что ты не робот

Фильтрация массива JSON с помощью jQuery grep()

Я искал много примеров на этом сайте, но не могу вписать их в мои потребности. Мне просто нужно отфильтровать некоторые результаты JSON, используя grep().

Ниже мой JSON:

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


В приведенном выше примере

  • как бы мне вернуть все предметы с категорией cat1?
  • как бы вернуть все предметы с категориями cat1 и id из 3?

Я знаю, что это не хороший пример, но любая помощь будет потрясающей! Спасибо!

Я пробовал варианты следующих

data.items = $.grep(data.items, function(element, index) {
    return element.id == 1;
    console.log(data.items);
});
4b9b3361

Ответ 1

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

var returnedData = $.grep(data.items, function (element, index) {
    return element.id == 1;
});


alert(returnedData[0].id + "  " + returnedData[0].category);

Возвращаемая информация возвращает массив объектов, поэтому вы можете получить к нему доступ по индексу массива.

http://jsfiddle.net/wyfr8/913/

Ответ 2

var data = {
  "items": [{
    "id": 1,
    "category": "cat1"
  }, {
    "id": 2,
    "category": "cat2"
  }, {
    "id": 3,
    "category": "cat1"
  }, {
    "id": 4,
    "category": "cat2"
  }, {
    "id": 5,
    "category": "cat1"
  }]
};
//Filters an array of numbers to include only numbers bigger then zero.
//Exact Data you want...
var returnedData = $.grep(data.items, function(element) {
  return element.category === "cat1" && element.id === 3;
}, false);
console.log(returnedData);
$('#id').text('Id is:-' + returnedData[0].id)
$('#category').text('Category is:-' + returnedData[0].category)
//Filter an array of numbers to include numbers that are not bigger than zero.
//Exact Data you don't want...
var returnedOppositeData = $.grep(data.items, function(element) {
  return element.category === "cat1";
}, true);
console.log(returnedOppositeData);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p id='id'></p>
<p id='category'></p>