按值对 JSON 进行分组

19
使用Lever工作发布API,我正在获取按位置排序的JSON结果,并尝试弄清如何在结果中按“团队”分组,就像Shopify职业页面一样。 这是codepen,这是JSON。 我尝试在codepen的第38行添加以下内容以尝试获取团队值,但输出不符预期(每行只有一个字母,这并不有用):
for (var x in _data[i].postings[j].categories.team)

我确定这可能非常简单,但我绝对不是一个 JavaScript 专家。任何帮助都将不胜感激!


可能是Summarize and Group JSON object in Jquery的重复问题。 - Heretic Monkey
1
请在问题中发布您的代码和JSON示例。 - hindmost
请放置相关代码以避免投票下降 - Abdennour TOUMI
1个回答

52

假设,JSON 输出为:

outJSON = 
[ {
      team: "TeamA",
      name: "Ahmed",
      field3:"val3"
  }, 
{
      team: "TeamB",
      name: "Ahmed",
      field3:"val43"
  }, 
{
      team: "TeamA",
      name: "Ahmed",
      field3:"val55"
  }, 
]

接下来请查看以下 DEMO 中的 groupBy 函数:


DEMO:

outJSON = [{
  team: "TeamA",
  name: "Ahmed",
  field3: "val3"
}, {
  team: "TeamB",
  name: "Ahmed",
  field3: "val43"
}, {
  team: "TeamA",
  name: "Ahmed",
  field3: "val55"
}]

var groupBy = function(xs, key) {
  return xs.reduce(function(rv, x) {
    (rv[x[key]] = rv[x[key]] || []).push(x);
    return rv;
  }, {});
};
var groubedByTeam = groupBy(outJSON, 'team')
console.log(groubedByTeam);

那么,如果你想循环遍历类别(团队),获取所有类别并存入数组:

Object.keys(groubedByTeam) // return ["TeamA","TeamB"]

然后:
Object.keys(groubedByTeam).forEach(function(category) {
    console.log(`Team ${category} has ${groubedByTeam[category].length} members : `);
        groubedByTeam[category].forEach(function(memb,i){
        console.log(`---->${i+1}. ${memb.name}.`)
    })
});

3
我相信那很好用,但是如果没有上下文的话,我完全不理解。我会尝试问一些朋友,这样我就能够看到如何使用提供的JSON数据。谢谢! - robotsmeller
1
你好,能否写一些解释帮助我们更好地理解?谢谢。 - Jonathan
xs.reduce 不是一个函数。 - aswzen
1
如果我想使用两个字段应用分组,该怎么办? - Sunil Garg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接