在 Node 中按 JSON 数据分组

新手上路,请多包涵

在我的 nodeJs 代码中,我正在从数据库中获取一些记录。我正在获取 JSON 格式的数据,如下所示:

 "Data": [{
    "id": 1,
    "color": "blue",
    "model_name": "ford",
    "year": 2016
}, {
    "id": 2,
    "color": "blue",
    "model_name": "Maruti",
    "year": 2016
}, {
    "id": 3,
    "color": "red",
    "model_name": "Fiat",
    "year": 2016
}, {
    "id": 4,
    "color": "red",
    "model_name": "tata",
    "year": 2016
}]

我想要的是类似于以下 JSON 的内容:

 "Data": [{
    "color": "blue",
    car: [{
        "id": 1,
        "color": "blue",
        "model_name": "ford",
        "year": 2016
    }, {
        "id": 2,
        "color": "blue",
        "model_name": "Maruti",
        "year": 2016
    }]
}, {
    "color": "red",
    car: [{
        "id": 3,
        "color": "red",
        "model_name": "Fiat",
        "year": 2016
    }, {
        "id": 4,
        "color": "red",
        "model_name": "tata",
        "year": 2016
    }]
}]

我可以通过使用下面的代码使用下划线 JS 的“groupBy”方法来实现这一点:

 var groupedData = _.groupBy(rows, f=>{return f.color});

但是输出变为:

 "Data": [{
    "blue": [{
        "id": 1,
        "color": "blue",
        "model_name": "ford",
        "year": 2016
    }, {
        "id": 2,
        "color": "blue",
        "model_name": "Maruti",
        "year": 2016
    }]
}, {

    "red": [{
        "id": 3,
        "color": "red",
        "model_name": "Fiat",
        "year": 2016
    }, {
        "id": 4,
        "color": "red",
        "model_name": "tata",
        "year": 2016
    }]
}]

这里的问题是颜色名称本身就是关键。我想要这种格式的 “color”: “blue” ,但是在一个组中。

原文由 aroz2016 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 260
1 个回答

纯 ES6 代码的另一种直接方法。

 var data = [
{
  "id": 1,
  "color": "blue",
  "model_name": "ford",
  "year": 2016
},
{
  "id": 2,
  "color": "blue",
  "model_name": "Maruti",
  "year": 2016
},
{
  "id": 3,
  "color": "red",
  "model_name": "Fiat",
  "year": 2016
},
{
  "id": 4,
  "color": "red",
  "model_name": "tata",
  "year": 2016
}],
    hash = data.reduce((p,c) => (p[c.color] ? p[c.color].push(c) : p[c.color] = [c],p) ,{}),
 newData = Object.keys(hash).map(k => ({color: k, car: hash[k]}));
console.log(newData);

原文由 Redu 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题