javascript - 将两个 json 对象数据合并为一个,JSON 为新的 Single JSON,

标签 javascript jquery arrays json object

我有这个对象,定义如下:

var object = {
  "driver_data": [{
    "slot": 0,
    "rideCount":98
  }, {
    "slot": 30,
    "rideCount": 75
  }, {
    "slot": 100,
    "rideCount": 0
  }],
  "passenger_data": [{
    "slot": 0,
    "rideCount":33
  }, {
    "slot": 30,
    "rideCount": 56
  }, {
    "slot": 100,
    "rideCount": 37
  }]
}

想要转换为:

[{"Slot":0,"passenger_data":98,"driver_data":33},
 {"Slot":30,"passenger_data":75,"driver_data":56},
 {"Slot":100,"passenger_data":0,"driver_data":37}
]

我尝试过这个但行不通。

var slot1 = [],
  Dride = [],
  Pride = [];
var object = {
  "driver_data": [{
    "slot": 0,
    "rideCount": 98
  }, {
    "slot": 30,
    "rideCount": 75
  }, {
    "slot": 100,
    "rideCount": 0
  }],
  "passenger_data": [{
    "slot": 0,
    "rideCount": 33
  }, {
    "slot": 30,
    "rideCount": 56
  }, {
    "slot": 100,
    "rideCount": 37
  }]
}
object.driver_data.forEach(function(key) {
  slot1.push(key.slot);
  Pride.push(key.rideCount)
});
object.passenger_data.forEach(function(key) {
  Dride.push(key.rideCount);
});
var myObj = {},
  myObj1 = {},
  myObj2 = {},
   monk=['Slot','passenger_data','driver_data'];
  var arr = [];
  for(var i=0;i<3;i++){
myObj[monk[i]] = slot1[i];
myObj1[monk[i]] = Pride[i];
myObj2[monk[i]]  = Dride[i];
}
arr.push(myObj, myObj1, myObj2)
console.log(JSON.stringify(arr))
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

最佳答案

假设 driver_datapassenger_dataslot 的顺序相同,您可以在 mapdriver_data像这样:

var obj = {"driver_data":[{"slot":0,"rideCount":98},{"slot":30,"rideCount":75},{"slot":100,"rideCount":0}],"passenger_data":[{"slot":0,"rideCount":33},{"slot":30,"rideCount":56},{"slot":100,"rideCount":37}]}

let output = obj.driver_data.map((d, index) => ({ 
        Slot: slot, 
        driver_data: d.rideCount, 
        passenger_data: obj.passenger_data[index].rideCount
     }))

console.log(output)

如果slot的顺序不同,您可以使用mapfind像这样。获取与司机具有相同槽位乘客。返回具有计数值的新对象

var obj={"driver_data":[{"slot":0,"rideCount":98},{"slot":30,"rideCount":75},{"slot":100,"rideCount":0}],"passenger_data":[{"slot":0,"rideCount":33},{"slot":30,"rideCount":56},{"slot":100,"rideCount":37}]}

let output = obj.driver_data.map(d => {
  let passenger = obj.passenger_data.find(p => p.slot === d.slot);
  return {
    Slot: d.slot,
    driver_data: d.rideCount,
    passenger_data: (passenger || {}).rideCount
  }
})

console.log(output)

或者使用Array.from (假设插槽按顺序排列)

var obj={"driver_data":[{"slot":0,"rideCount":98},{"slot":30,"rideCount":75},{"slot":100,"rideCount":0}],"passenger_data":[{"slot":0,"rideCount":33},{"slot":30,"rideCount":56},{"slot":100,"rideCount":37}]}

let { driver_data, passenger_data } = obj;

const output = Array.from({ length: driver_data.length }, (_, i) => {
  return {
    Slot: driver_data[i].slot,
    driver_data: driver_data[i].rideCount,
    passenger_data: passenger_data[i].rideCount
  }
})

console.log(output)

关于javascript - 将两个 json 对象数据合并为一个,JSON 为新的 Single JSON,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55235657/

相关文章:

javascript - Internet Explorer 中的语音识别

javascript - angular $scope 改变时不更新 HTML

javascript - 尝试定位无序列表中的特定数字 LI 项目并附加 html

jquery - 如何从 SVG 波浪中隐藏圆圈?

java - 为什么arraylist 类既要实现List 又要扩展AbstractList?

c++ - 用字符随机化一个二维数组?

python - 沿 2D 数组的最后一个轴滑动窗口以使用 NumPy strides 给出 3D 数组

javascript - Titanium:使用 Titanium UI 设置文本字段的 ID

javascript - 存储值以便在以后的函数中使用的最佳方法是什么?我听说全局变量是邪恶的

javascript - echo onClick 后删除 sql 行