Группа объектов JSON по значению

0

Я создал базу данных продукта с помощью JSON:

{
"1": {"group":"1", "name":"bmw" },
"2": {"group":"1", "name":"audi"},
"3": {"group":"2", "name":"volvo"}
}

Но теперь мне нужно создать снимок HTML со всеми элементами по id группы.

Я пытался использовать Javascript .grep() но у меня недостаточно опыта, как это сделать. Любая помощь?

var all;
$.getJSON("data.json", function( data ) {
    all = data;
});
var group1 = $.grep(all, function(el, i) {
    return el.group. === 2
});
console.log(JSON.stringify(group1));
  • 1
    Покажите свою попытку с помощью grep и желаемый результат
  • 0
    Это может быть хорошим местом для начала stackoverflow.com/questions/14220321/…
Показать ещё 1 комментарий
Теги:

1 ответ

1

Согласно документации $.grep предназначен для использования с массивами, по совпадению он также имеет несколько ясных примеров... ваш объект JSON не является массивом, а объектным литералом. В идеале вместо этого:

{
    "1": {"group":"1", "name":"bmw"  },
    "2": {"group":"1", "name":"audi" },
    "3": {"group":"2", "name":"volvo"}
}

Ваш ответ должен возвращаться примерно так:

{
    products: [
        {"group":"1", "name":"bmw"  },
        {"group":"1", "name":"audi" },
        {"group":"2", "name":"volvo"}    
    ]
}

Затем с небольшой настройкой ваш пример вернет желаемый объект в другом массиве - обратите внимание на разницу между операторами === и == как в примере вашего JSON, группа возвращается как строка, а не число.

var group1 = $.grep(all.products, function(el, i){
    return el.group == 2;
});

Если вы по-прежнему хотите работать со своим оригинальным объектом JSON (который не должен, поскольку его ключи кажутся избыточными и несколько неэффективными), вам придется разработать собственный метод фильтрации. Например:

var group1 = {};
$.each(all, function(i, el){
    if(el.group == 2) group1[i] = el; 
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню