javascript - 使用 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 是唯一的。
解决方案
您可以使用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);
推荐阅读
- java - Java:如何对封装注入或生成的依赖项进行单元测试?
- php - 通过 http 从 PHP 到 Angular 6 的二进制数据
- kotlin - 如何处理kotlin中的多态性
- android - 我的应用程序屏幕在物理设备上显示错误
- graphql - Apollo / GraphQL 具有不同参数的相同查询
- node.js - Passport.authenticate 不在 Node/MongoDB 应用程序中调用
- excel - 更改数据透视图的标题
- javascript - 使用语言环境解析时日期无效
- javascript - 解压缩文件并以角度将内容上传到Firestore后如何调用函数?
- c++ - 当状态发生变化时,是否有 QML 元素来通知辅助功能树?