展平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);
            }
        }
    });