Я создал базу данных продукта с помощью 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));
Согласно документации $.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;
});