aro*_*016 1 javascript json node.js underscore.js-templating
在我的 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
}]
Run Code Online (Sandbox Code Playgroud)
我想要的是类似于以下 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
}]
}]
Run Code Online (Sandbox Code Playgroud)
我可以使用下面的代码使用下划线 JS 的“groupBy”方法来实现这一点:
var groupedData = _.groupBy(rows, f=>{return f.color});
Run Code Online (Sandbox Code Playgroud)
但是输出变为:
"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
}]
}]
Run Code Online (Sandbox Code Playgroud)
这里的问题是颜色名称本身就是关键。我想要 "color": "blue" ,以这种格式但在一组中。
纯 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);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10292 次 |
| 最近记录: |