JSON对象按值分组

JSON object group by value

本文关键字:对象 JSON      更新时间:2023-11-24

我用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; 
});