Javascript 将对象数组转换为用于构建图表的嵌套数组
我有以下数组Javascript 将对象数组转换为用于构建图表的嵌套数组,javascript,arrays,json,javascript-objects,Javascript,Arrays,Json,Javascript Objects,我有以下数组 const data = [ { date: "2018-01-01", label: "MH", qt: 10 }, { date: "2018-04-01", label: "MH", qt: 30 }, { date: "2018-02-01", label: "GJ", q
const data = [
{
date: "2018-01-01",
label: "MH",
qt: 10
},
{
date: "2018-04-01",
label: "MH",
qt: 30
},
{
date: "2018-02-01",
label: "GJ",
qt: 30
},
{
date: "2018-03-01",
label: "KL",
qt: 30
},
{
date: "2018-02-01",
label: "KL",
qt: 40
}
]
我希望我的输出是
[
[date,MH,GJ,KL],
['Jan 2018',10,null,null],
['Feb 2018',null,30,40],
['Mar 2018',null,null,30],
['Apr 2018',30,null,null]
]
如何以优化的方式实现这一点?
并且应该对日期进行排序,以便进行排序。
我试过了
data.sort(function compare(a, b) {
var dateA = new Date(a.date);
var dateB = new Date(b.date);
return dateA - dateB;
});
let labelArr = data.map(l => l.label);
let dateArr = data.map(l => l.date);
labelArr = _.uniq(labelArr);
dateArr = _.uniq(dateArr);
console.log(labelArr, dateArr);
const outputArr = [];
dateArr.forEach(d => {
labelArr.forEach(l => {
const tempObj = data.filter(r => {
if (d == r.date && l == r.label) {
return r;
}
else {
return { date: d, label: l, qt: null }
}
})
outputArr.push(tempObj);
});
});
但我被困在这里了。我想的是,首先,我将为date和label创建不存在的对象,并将其qt添加到null。之后,我将按日期分组,然后仅将qt插入结果中您可以使用一个对象来保存每个日期的数组,并使用一个对象来跟踪列的索引 最后,将未设置项的所有元素设置为null var数据=[{日期:2018-01-01,标签:MH,qt:10},{日期:2018-04-01,标签:MH,qt:30},{日期:2018-02-01,标签:GJ,qt:30},{日期:2018-03-01,标签:KL,qt:30},{日期:2018-02-01,标签:KL,qt:40}], cols={}, 行={}, 结果=数据 .sort{date:a},{date:b}=>a>b | |-a{ 日期=日期0,7; 如果!行[日期]r.pushrows[日期]=[日期]; 如果!cols[label]cols[label]=r[0].pushlabel-1; 行[date][cols[label]]=行[date][cols[label]]||0+qt; 返回r; },['日期']] .mapa,{length}]=>Array.from{length},{i=>a[i]| | null; console.logresult;
.作为控制台包装{max height:100%!important;top:0;}您可以使用一个对象来保存每个日期的数组,并使用一个对象来跟踪列的索引 最后,将未设置项的所有元素设置为null var数据=[{日期:2018-01-01,标签:MH,qt:10},{日期:2018-04-01,标签:MH,qt:30},{日期:2018-02-01,标签:GJ,qt:30},{日期:2018-03-01,标签:KL,qt:30},{日期:2018-02-01,标签:KL,qt:40}], cols={}, 行={}, 结果=数据 .sort{date:a},{date:b}=>a>b | |-a{ 日期=日期0,7; 如果!行[日期]r.pushrows[日期]=[日期]; 如果!cols[label]cols[label]=r[0].pushlabel-1; 行[date][cols[label]]=行[date][cols[label]]||0+qt; 返回r; },['日期']] .mapa,{length}]=>Array.from{length},{i=>a[i]| | null; console.logresult;
.as console wrapper{max height:100%!important;top:0;}我不知道这是否是最好的解决方案,但这是一个有效的解决方案: 常数数据=[{ 日期:2018-01-01, 标签:MH, qt:10 }, { 日期:2018-04-01, 标签:MH, qt:30 }, { 日期:2018-02-01, 标签:GJ, qt:30 }, { 日期:2018-03-01, 标签:吉隆坡, qt:30 }, { 日期:2018-02-01, 标签:吉隆坡, qt:40 } ] 函数formatDatadata{ 常量标签={}; 常量映射={}; 数据 .sorta,b=>a.date
我不知道这是否是最好的解决方案,但这是一个有效的解决方案: 常数数据=[{ 日期:2018-01-01, 标签:MH, qt:10 }, { 日期:2018-04-01, 标签:MH, qt:30 }, { 日期:2018-02-01, 标签:GJ, qt:30 }, { 日期:2018-03-01, 标签:吉隆坡, qt:30 }, { 日期:2018-02-01, 标签:吉隆坡, qt:40 } ] 函数formatDatadata{ 常量标签={}; 常量映射={}; 数据 .sorta,b=>a.date
data.sort(function compare(a, b) {
var dateA = new Date(a.date);
var dateB = new Date(b.date);
return dateA - dateB;
});
let labelArr = data.map(l => l.label);
let dateArr = data.map(l => l.date);
labelArr = _.uniq(labelArr);
dateArr = _.uniq(dateArr);
const outputArr = [['Date', ...labelArr]];
dateArr.forEach(d => {
const o1 = data.filter(e => e.date == d)
const o2 = o1.reduce((s, a) => {
s[a.label] = a.qt;
return s;
}, {})
const b1 = []
labelArr.forEach(l => {
b1.push(o2[l])
});
outputArr.push([moment(d).format('MMM YYYY'), ...b1]);
});
希望它能帮助别人。我尝试过这样做:
data.sort(function compare(a, b) {
var dateA = new Date(a.date);
var dateB = new Date(b.date);
return dateA - dateB;
});
let labelArr = data.map(l => l.label);
let dateArr = data.map(l => l.date);
labelArr = _.uniq(labelArr);
dateArr = _.uniq(dateArr);
const outputArr = [['Date', ...labelArr]];
dateArr.forEach(d => {
const o1 = data.filter(e => e.date == d)
const o2 = o1.reduce((s, a) => {
s[a.label] = a.qt;
return s;
}, {})
const b1 = []
labelArr.forEach(l => {
b1.push(o2[l])
});
outputArr.push([moment(d).format('MMM YYYY'), ...b1]);
});
希望这对其他人有所帮助。请添加您的尝试。您想要MH,GJ,KL的固定顺序吗?@NinaScholz抱歉没有得到MH,GJ,KL数组中的顺序可以是随机的吗?@EugenSunic是的请添加您的尝试。您想要MH,GJ,KL的固定顺序吗?@NinaScholz抱歉没有得到您不能得到的
他在MH,GJ,KL数组中的顺序是随机的吗?@EugenSunic是的