按 属性 名称对数组进行分组并添加计数
Group array by property name and add count
我有以下数据结构:
var data = [
{ MainHeader: Header1, SubHeader: 'one'},
{ MainHeader: Header1, SubHeader: 'two'},
{ MainHeader: Header2, SubHeader: 'three'},
{ MainHeader: Header2, SubHeader: 'four'},
{ MainHeader: Header2, SubHeader: 'five'}
];
我需要把它变成这样的:
var groupheaders = [
{ startColName: 'one', numberofCols: 2, title: Header1},
{ startColName: 'three', numberofCols: 3, title: Header2}
];
是否有使用 Lodash 实现此目的的优雅方法?
您可以使用每个 MainHeader
作为键的映射对象。如果已添加 MainHeader
,则更新密钥的计数。否则,添加一个新键和一个对象作为其值
然后,使用 Object.values()
将值作为数组获取:
const data = [{MainHeader:"Header1",SubHeader:"one"},{MainHeader:"Header1",SubHeader:"two"},{MainHeader:"Header2",SubHeader:"three"},{MainHeader:"Header2",SubHeader:"four"},{MainHeader:"Header2",SubHeader:"five"}],
map = {};
data.forEach(({ MainHeader, SubHeader }) => {
if(map[MainHeader])
map[MainHeader].numberofCols++
else
map[MainHeader] = { title: MainHeader, startColName: SubHeader, numberofCols: 1 };
})
let output = Object.values(map);
console.log(output)
ES5 解决方案:
var data = [{MainHeader:"Header1",SubHeader:"one"},{MainHeader:"Header1",SubHeader:"two"},{MainHeader:"Header2",SubHeader:"three"},{MainHeader:"Header2",SubHeader:"four"},{MainHeader:"Header2",SubHeader:"five"}],
map = {};
data.forEach(function(o) {
if(map[o.MainHeader])
map[o.MainHeader].numberofCols++
else
map[o.MainHeader] = { title: o.MainHeader, startColName: o.SubHeader, numberofCols: 1 };
})
var output = Object.keys(map).map(function(k) {
return map[k];
});
console.log(output)
我有以下数据结构:
var data = [
{ MainHeader: Header1, SubHeader: 'one'},
{ MainHeader: Header1, SubHeader: 'two'},
{ MainHeader: Header2, SubHeader: 'three'},
{ MainHeader: Header2, SubHeader: 'four'},
{ MainHeader: Header2, SubHeader: 'five'}
];
我需要把它变成这样的:
var groupheaders = [
{ startColName: 'one', numberofCols: 2, title: Header1},
{ startColName: 'three', numberofCols: 3, title: Header2}
];
是否有使用 Lodash 实现此目的的优雅方法?
您可以使用每个 MainHeader
作为键的映射对象。如果已添加 MainHeader
,则更新密钥的计数。否则,添加一个新键和一个对象作为其值
然后,使用 Object.values()
将值作为数组获取:
const data = [{MainHeader:"Header1",SubHeader:"one"},{MainHeader:"Header1",SubHeader:"two"},{MainHeader:"Header2",SubHeader:"three"},{MainHeader:"Header2",SubHeader:"four"},{MainHeader:"Header2",SubHeader:"five"}],
map = {};
data.forEach(({ MainHeader, SubHeader }) => {
if(map[MainHeader])
map[MainHeader].numberofCols++
else
map[MainHeader] = { title: MainHeader, startColName: SubHeader, numberofCols: 1 };
})
let output = Object.values(map);
console.log(output)
ES5 解决方案:
var data = [{MainHeader:"Header1",SubHeader:"one"},{MainHeader:"Header1",SubHeader:"two"},{MainHeader:"Header2",SubHeader:"three"},{MainHeader:"Header2",SubHeader:"four"},{MainHeader:"Header2",SubHeader:"five"}],
map = {};
data.forEach(function(o) {
if(map[o.MainHeader])
map[o.MainHeader].numberofCols++
else
map[o.MainHeader] = { title: o.MainHeader, startColName: o.SubHeader, numberofCols: 1 };
})
var output = Object.keys(map).map(function(k) {
return map[k];
});
console.log(output)