找到一个组的所有可能相关值的最佳方法是什么。
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"]
当然要注意对 Object.keys
和 Array.prototype.forEach
的支持。
关于javascript - "Filter"唯一键的JSON并获取所有相关值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17298443/