我正在try 为我的网站做一个ChangeLog.

例如,我有一个初始数组,称为initArray:

[
    {
        "id": 1,
        "val1": "2023-08-28",
        "val2": 1,
        "val3": "",
        "val4": "",
    },
    {
        "id": 2,
        "val1": "2023-08-28",
        "val2": 2,
        "val3": "",
        "val4": ""
    },
    {
        "id": 3,
        "val1": "2023-08-28",
        "val2": 0,
        "val3": "",
        "val4": ""
    }
]

然后,我有第二个数组,称为changedArray:

[
    {
        "id": 1,
        "val1": "2023-08-28",
        "val2": 1,
        "val3": "test",
        "val4": "test1"
    },
    {
        "id": 2,
        "val1": "2023-08-28",
        "val2": 2,
        "val3": "test2",
        "val4": "test3"
    },
    {
        "id": 3,
        "val1": "2023-08-28",
        "val2": 0,
        "val3": "",
        "val4": ""
    }
]

因此,我需要找到更改过的值,并输出这些值的名称和值本身.如何做到这一点呢?

预期结果如下:

[
    {
        "changedValue": "val3", 
        "previousValue": "", 
        "newValue": "test"
    },
    //And so on...
] 

数组中的元素数量是恒定的,不能删除或添加元素-只有更改.

推荐答案

您可以使用Array#reduce函数对objectsarray进行循环,并将这些值与新数组中的相应对象进行比较.

const compare = (arr1, arr2) => 
   arr1.reduce((acc, next, idx) => {
      Object.entries(next).forEach(([key, val]) => {
         const newValue = arr2[idx]?.[key];
         if (newValue && val !== newValue) {
            acc.push({
               changedValue: key,
               previousValue: val,
               newValue,
            })
         }
      });
      
      return acc;
   }, []);
   
const data1=[{"val1":1,"val2":"2023-08-28","val3":1,"val4":"","val5":"",},{"val1":2,"val2":"2023-08-28","val3":2,"val4":"","val5":""},{"val1":3,"val2":"2023-08-28","val3":0,"val4":"","val5":""}];
const data2=[{"val1":1,"val2":"2023-08-28","val3":1,"val4":"test","val5":"test1"},{"val1":2,"val2":"2023-08-28","val3":2,"val4":"test2","val5":"test3"},{"val1":3,"val2":"2023-08-28","val3":0,"val4":"","val5":""}];
   
console.log(compare(data1, data2));

Typescript相关问答推荐

有没有办法适当缩小类型?

typescript抱怨值可以是未定义的,尽管类型没有定义

需要使用相同组件重新加载路由变更数据—React TSX

在泛型类型中对子代执行递归时出错

如何将所有props传递给React中的组件?

如何使用WebStorm调试NextJS的TypeScrip服务器端代码?

缩小并集子键后重新构造类型

如何调整对象 struct 复杂的脚本函数的泛型类型?

React Typescript项目问题有Redux-Toolkit userSlice角色问题

如何避免推断空数组

如何编写在返回函数上分配了属性的类型安全泛型闭包

从子类集合实例化类,同时保持对Typescript中静态成员的访问

将带有样式的Reaction组件导入到Pages文件夹时不起作用

缩小对象具有某一类型的任意字段的范围

类型脚本-处理值或返回值的函数

重写返回任何

使用RXJS获取数据的3种不同REST API

如何调整项目数组,但允许权重影响顺序

如何知道使用TypeScript时是否在临时工作流内运行

Typescript 和 Rust 中跨平台的位移数字不一致