有没有人知道最有效 loadash或underscore.js通过对象键对对象数组进行分组然后根据分组创建新的对象数组?例如,我有一系列汽车对象:
var cars = [
{
'make': 'audi',
'model: 'r8',
'year': '2012'
},
{
'make': 'audi',
'model: 'rs5',
'year': '2013'
},
{
'make': 'ford',
'model: 'mustang',
'year': '2012'
},
{
'make': 'ford',
'model: 'fusion',
'year': '2015'
},
{
'make': 'kia',
'model: 'optima',
'year': '2012'
},
];
我想制作一个按keys
分组的新汽车对象数组:
var cars =
[{
"title": "make",
"data": [{
"value": "audi"
},
{
"value": "ford"
},
{
"value": "kia"
}
]
},
{
"title": "model",
"data": [{
"value": "r8"
},
{
"value": "rs5"
},
{
"value": "mustang"
},
{
"value": "fusion"
},
{
"value": "optima"
}
]
},
{
"title": "year",
"data": [{
"value": "2012"
},
{
"value": "2013"
},
{
"value": "2015"
}
]
}
]
提前致谢!
答案 0 :(得分:1)
你需要这样的东西。
var cars =[
{
'make': 'audi',
'model': 'r8',
'year': '2012'
},
{
'make': 'audi',
'model': 'rs5',
'year': '2013'
},
{
'make': 'ford',
'model': 'mustang',
'year': '2012'
}
];
var result = _.map(cars, car => _. pairs(car))
console.log(result);

<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
&#13;
然后,根据需要对数组进行分组。
答案 1 :(得分:1)
可能不是非常有效但可读且直接的方法(没有lodash或下划线):
var cars = [
{
'make': 'audi',
'model': 'r8',
'year': '2012'
},
{
'make': 'audi',
'model': 'rs5',
'year': '2013'
},
{
'make': 'ford',
'model': 'mustang',
'year': '2012'
},
{
'make': 'ford',
'model': 'fusion',
'year': '2015'
},
{
'make': 'kia',
'model': 'optima',
'year': '2012'
},
];
var res = [];
cars.forEach(car => {
var keys = Object.keys(car);
keys.forEach(key => {
var obj = res.find(o => o.title === key);
if (obj) {
if (!obj.data.some(it => it.value === car[key])) {
obj.data.push( { value: car[key]} );
}
} else {
res.push( {title: key, data: []} );
}
});
});
console.log(res);
答案 2 :(得分:1)
不需要lodash或下划线。检查我的实现。
function GroupArray(array) {
let result = {};
array.forEach(function(item) {
Object.keys(item).forEach(function(key) {
if (!result[key]) result[key] = [];
if (result[key].indexOf(item[key]) == -1) {
result[key].push(item[key]);
}
});
});
return result;
}
var cars = [
{
'make': 'audi',
'model': 'hello',
'year': '2012'
},
{
'make': 'audi',
'model': 'rs5',
'year': '2013'
},
{
'make': 'ford',
'model': 'mustang',
'year': '2012'
},
{
'make': 'ford',
'model': 'fusion',
'year': '2015'
},
{
'make': 'kia',
'model': 'optima',
'year': '2012'
},
];
console.log(GroupArray(cars));