js操作json

   var Data1 = [
         { time: 1440491658, a: 1 },
         { time: 1440491668, a: 3 },
         { time: 1440491668, b: 5 },
         { time: 1440491668, c: 7 },
         { time: 1440491668, d: 12 },
         { time: 1440491678, a: 11 },
         { time: 1440491678, b: 88 },
         { time: 1440491678, c: 13 },
         { time: 1440491678, d: 100 },
         { time: 1440491688, a: 11 },
         { time: 1440491688, b: 69 },
         { time: 1440491688, c: 12 },
         { time: 1440491688, d: 73 }
         ];

 var Data2 = [
         { time: 1440491658, a: 1 },
         { time: 1440491668, a: 3, b: 5, c: 7, d: 12 },
         { time: 1440491678, a: 11, b: 88, c: 13, d: 100},
         { time: 1440491688, a: 11, b: 69, c: 12, d: 73 }
         ];
         
        //如何将data1的json转换成data2的格式??
阅读 2k
3 个回答
var Data1 = [
     { time: 1440491658, a: 1 },
     { time: 1440491668, a: 3 },
     { time: 1440491668, b: 4 },
     { time: 1440491668, c: 7 },
     { time: 1440491668, d: 12 },
     { time: 1440491678, a: 11 },
     { time: 1440491678, b: 88 },
     { time: 1440491678, c: 13 },
     { time: 1440491678, d: 100 },
     { time: 1440491688, a: 11 },
     { time: 1440491688, b: 69 },
     { time: 1440491688, c: 12 },
     { time: 1440491688, d: 73 }
     ];
var map = {},arr = [];         
for(var i=0;i<Data1.length;i++){
    if(map[Data1[i].time]===undefined){
        map[Data1[i].time] = Object.assign({},Data1[i]);
    }else{
        Object.assign(map[Data1[i].time],Data1[i])
    }
}
for(var key in map){
    arr.push( map[key] )
}
console.dir(arr)

我想问下,你问题中的Data2是不是写错了,因为你data1中,根本没有3,5这两个数字出现

var Data2 = [
 { time: 1440491658, a: 1 },
//下面的是不是有问题,data1中都没有{time: 1440491668,a:3}和{time: 1440491668,b:5}
 { time: 1440491668, a: 3, b: 5, c: 7, d: 12 },
 { time: 1440491678, a: 11, b: 88, c: 13, d: 100},
 { time: 1440491688, a: 11, b: 69, c: 12, d: 73 }
 ];

难道是我理解错题目意思了?

执行下面的代码,data2就是转换后的结果

var data2 = [];
for(var i =0; i < data1.length; i++) {
  var existed = false;
  for(var j = 0; j< data2.length; j++) {
    if(data1[i].time == data2[j].time){
      for(var key in data1[i]) {
        if(key !== 'time') {
          data2[j][key] = data1[i][key];
        }
      }
      existed = true;
      break;
    }
  }
  if(!existed){
    data2.push(data1[i]);
  } 
}

供参考

Array.from(Data1.reduce((m, x) => m.set(x.time, Object.assign(m.get(x.time) || {}, x)), new Map()).values())
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题