我用JSON创建了产品数据库:
{
"1": {"group":"1", "name":"bmw" },
"2": {"group":"1", "name":"audi"},
"3": {"group":"2", "name":"volvo"}
}
但现在我需要按组ID创建一个包含所有元素的HTML下拉列表。
我尝试使用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));
答案 0 :(得分:1)
根据documentation $.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"}
]
}
然后稍微调整一下你的例子就会在另一个数组中返回你想要的对象 - 记下你在中===
和==
operators之间的区别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;
});