首页 > 解决方案 > 使用 javascript 从实时数据更新 json 数组

问题描述

我首先通过一个 api 请求得到一个非常大的 json 数组。然后使用 signalR 我得到一个较小的 json 数组,其中仅包含已从 api 数据更改的 json 对象。

我要做的是从 api 数组中获取更改的对象,并使用来自 signalR 的新数据更新它们。
以下是 api 响应。

[
  {carID: 38697, carNumber: 5665, dispatchStatus: 2, dataVersionNr: "AAAAAAhFXtQ=", postingID: 91},
  {carID: 38753, carNumber: 5522, dispatchStatus: 0, dataVersionNr: "AAAAAAhFXtM=", postingID: 91},
  {carID: 38635, carNumber: 5830, dispatchStatus: 2, dataVersionNr: "AAAAAAhFXtI=", postingID: 91},
  {carID: 39340, carNumber: 30027, dispatchStatus: 2, dataVersionNr: "AAAAAAhFXtE=", postingID: 91},
  {carID: 39168, carNumber: 16064, dispatchStatus: 2, dataVersionNr: "AAAAAAhFXtA=", postingID: 91},
  {carID: 40107, carNumber: 5895, dispatchStatus: 0, dataVersionNr: "AAAAAAhFXs8=", postingID: 91},
  {carID: 38647, carNumber: 22185, dispatchStatus: 0, dataVersionNr: "AAAAAAhFXs4=", postingID: 91},
  {carID: 39416, carNumber: 22180, dispatchStatus: 2, dataVersionNr: "AAAAAAhFXs0=", postingID: 91}
]

这是 signalR 更新。

[
  {carID: 38697, carNumber: 5665, dispatchStatus: 1, dataVersionNr: "AAAAAAhFXtQ=", postingID: 42},
  {carID: 38753, carNumber: 5522, dispatchStatus: 3, dataVersionNr: "AAAAAAhFXtM=", postingID: 91},
]

carNumber 是唯一的。

标签: javascriptjqueryjson

解决方案


您可以使用Object.assign方法来更新给定的数组。此外,map通过传递一个callback函数作为参数来使用方法,该参数应用于给定数组中的每个项目。

let array = [ {carID: 38697, carNumber: 5665, dispatchStatus: 2, dataVersionNr: "AAAAAAhFXtQ=", postingID: 91}, {carID: 38753, carNumber: 5522, dispatchStatus: 0, dataVersionNr: "AAAAAAhFXtM=", postingID: 91}, {carID: 38635, carNumber: 5830, dispatchStatus: 2, dataVersionNr: "AAAAAAhFXtI=", postingID: 91}, {carID: 39340, carNumber: 30027, dispatchStatus: 2, dataVersionNr: "AAAAAAhFXtE=", postingID: 91}, {carID: 39168, carNumber: 16064, dispatchStatus: 2, dataVersionNr: "AAAAAAhFXtA=", postingID: 91}, {carID: 40107, carNumber: 5895, dispatchStatus: 0, dataVersionNr: "AAAAAAhFXs8=", postingID: 91}, {carID: 38647, carNumber: 22185, dispatchStatus: 0, dataVersionNr: "AAAAAAhFXs4=", postingID: 91}, {carID: 39416, carNumber: 22180, dispatchStatus: 2, dataVersionNr: "AAAAAAhFXs0=", postingID: 91} ]

let update_array = [ {carID: 38697, carNumber: 5665, dispatchStatus: 1, dataVersionNr: "AAAAAAhFXtQ=", postingID: 42}, {carID: 38753, carNumber: 5522, dispatchStatus: 3, dataVersionNr: "AAAAAAhFXtM=", postingID: 91}, ]

array = array.map(function(item){
  var car = update_array.find(a => a.carID == item.carID);
  return car ? Object.assign(item, car) : item;
});
console.log(array);


推荐阅读