javascript - "Filter"唯一键的JSON并获取所有相关值

标签 javascript jquery arrays json object

找到一个组的所有可能相关值的最佳方法是什么。

var table = [
    {group:"a", stuff:"new"},
    {group:"a", stuff:"old"},
    {group:"b", stuff:"newOld"},
    {group:"b", stuff:"old"},
    {group:"c", stuff:"new"},
    {group:"c", stuff:"old"},
    {group:"c", stuff:"newOld"},
];

我想填充一个包含唯一 group 值的下拉列表。在选择时,我想使用所有相关的 stuff 进行进一步处理。并且还想添加一个包含所有 stuff 的组。例如

on selection of all -> new, old, newOld
                a -> new, old
                b -> newOld, old
                c -> new, old, newOld

最佳答案

简短而精确,没有每次在整个数组中查找条目的开销:

var groups = {all:{}};
table.forEach(function(a){
    if (!groups[a.group]){ groups[a.group] = {}; }
    groups[a.group][a.stuff] = groups["all"][a.stuff] = 1;
});

列出对象中的内容,因此您没有重复的条目(这就是为什么相当多余的=1)。但是您可以轻松地扩展它来计算重复项:

table.forEach(function(a){
    if (!groups[a.group]){ groups[a.group] = {}; }
    var stuff = groups["all"][a.stuff];
    groups["all"][a.stuff] = !stuff ? 1 : ++stuff;
    stuff = groups[a.group][a.stuff];
    groups[a.group][a.stuff] = !stuff ? 1 : ++stuff;
});

结果如下所示:

// "groups" holds all group elements and their stuff values
groups = { "all": {"new":2,"old":3,"newOld":2},
           "a" : {"new":1,"old":1},
           "b" : {"newOld":1,"old":1},
           "c" : {"new":1,"old":1,"newOld":1}
         }

要检索组的值,只需说:

var groupname = "a"; // whatever group you need
Object.keys(groups[groupname]);
// will give you:
["new","old"]

Demo

当然要注意对 Object.keysArray.prototype.forEach 的支持。

关于javascript - "Filter"唯一键的JSON并获取所有相关值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17298443/

相关文章:

javascript - 将 html 中的表单值分配给 javascript 变量

javascript - jQuery 查找与输入值对应的 id

javascript - 如何从网站链接打开 Facebook 应用程序

javascript - 如何将js脚本从html连接到Django静态

javascript - 如何在 OnKeyPress 事件发生后获取输入表单元素的值?

java - 如何上传图片并将其保存到数据库中?

JavaScript:如何生成随机字母表,其中某些单词随机隐藏?

jquery - 在DataTables中,如何根据条件显示行?

jquery - 编辑自定义 <ul> 数组的文本

javascript - 用静态字符串替换数组中的最后一个元素