展平Javascript对象数组
我的目标是:展平Javascript对象数组,javascript,arrays,each,Javascript,Arrays,Each,我的目标是: [ { "DATA": "2016-01-22", "TOTAL": "7" }, { "DATA": "2016-01-25", "TOTAL": "3" }, { "DATA": "2016-01-26", "TOTAL": "1" }, { "DATA": "2016-01-27", "TOTAL": "2" }, { "DATA": "2016-01-22",
[
{
"DATA": "2016-01-22",
"TOTAL": "7"
},
{
"DATA": "2016-01-25",
"TOTAL": "3"
},
{
"DATA": "2016-01-26",
"TOTAL": "1"
},
{
"DATA": "2016-01-27",
"TOTAL": "2"
},
{
"DATA": "2016-01-22",
"TOTAL": "1"
},
{
"DATA": "2016-01-25",
"TOTAL": "1"
},
{
"DATA": "2016-01-27",
"TOTAL": "1"
},
...
]
我如何将其缩小为如下所示,即,在日期相同的情况下连接/连接总键,并在日期不重复的情况下填充0
[
{
"DATA": "2016-01-22",
"TOTAL": ["7", "1"]
},
{
"DATA": "2016-01-25",
"TOTAL": ["3", "1"]
},
{
"DATA": "2016-01-26",
"TOTAL": ["1", "0"]
},
{
"DATA": "2016-01-27",
"TOTAL": ["2", "1"]
}
]
我一直在尝试使用这段代码,但无法获得所有相同维度的总键-填充零就可以了
var output = [];
d.forEach(function(value) {
var existing = output.filter(function(v, i) {
return v.DATA == value.DATA;
});
if (existing.length) {
var existingIndex = output.indexOf(existing[0]);
output[existingIndex].TOTAL = output[existingIndex].TOTAL.concat(value.TOTAL);
} else {
if (typeof value.TOTAL == 'string')
value.TOTAL = [value.TOTAL];
output.push(value);
}
});
console.log(JSON.stringify(output, null, 4));
var someData=[]//{
var foundIndex=transformedData.findIndex((ele)=>ele.DATA==x.DATA);
if(foundIndex<0){
转换数据
.push({DATA:x.DATA,总计:[x.TOTAL]});
}否则{
转换数据[foundIndex]
.总推力(x.总推力);
var currentCountAtIndex=transformedData[foundIndex].TOTAL.length;
if(highestCount{
如果(x.总长度<最高计数){
而(x.总长度<最高计数){
x、 总推力(0);
}
}
});
它可以这么简单:
var result={};
var测试=[
{
“数据”:“2016-01-22”,
“总计”:“7”
},
{
“数据”:“2016-01-25”,
“总计”:“3”
},
{
“数据”:“2016-01-26”,
“总计”:“1”
},
{
“数据”:“2016-01-27”,
“总计”:“2”
},
{
“数据”:“2016-01-22”,
“总计”:“1”
},
{
“数据”:“2016-01-25”,
“总计”:“1”
},
{
“数据”:“2016-01-27”,
“总计”:“1”
}];
log(“测试数组:”,测试);
var len=0,
分类;
//将对象展平。
test.forEach(d=>{
结果[d.DATA]==未定义?结果[d.DATA]=[d.TOTAL]:结果[d.DATA]。推送(d.TOTAL);
});
//进行排序,以获得最大长度,从而知道要添加多少个零。
排序=对象。键(结果)。排序((k,b)=>{
返回结果[k].length-result[b].length;
});
//排序数组的最大长度。
len=结果[sorted[sorted.length-1]].length;
//推零
Object.keys(result.forEach)(k=>{
if(结果[k]。长度 日志(“结果:”,结果)
输出
显示为返回预期结果,保存为索引2
处的对象包含一个数组,其长度为1
?回答不错。如果那样行的话,我会同意的。唯一的问题是,您正在将“数据”键更改为它们的值,这可能不是OP所需要的(至少不是我们在问题示例中所需要的)。谢谢,它仍然是真正的“相同”对象。只需更改访问值的键即可。我现在正在加零,就是这样!非常好:)
var someData = [] // <- your instantiated array in question.
var transformedData = [];
var highestCount = 0;
someData.forEach(x => {
var foundIndex = transformedData.findIndex((ele) => ele.DATA === x.DATA);
if (foundIndex < 0) {
transformedData
.push({DATA : x.DATA, TOTAL : [x.TOTAL]});
} else {
transformedData[foundIndex]
.TOTAL.push(x.TOTAL);
var currentCountAtIndex = transformedData[foundIndex].TOTAL.length;
if (highestCount < transformedData[foundIndex].TOTAL.length) highestCount = currentCountAtIndex;
}
});
// fill any indicies in array that are lower than the highest count with 0
transformedData
.forEach(x => {
if (x.TOTAL.length < highestCount) {
while(x.TOTAL.length < highestCount) {
x.TOTAL.push(0);
}
}
});