比较两个对象数组,仅基于匹配的属性进行比较。

9 浏览
0 Comments

比较两个对象数组,仅基于匹配的属性进行比较。

我有两个对象数组

    this.originalData = [
        {age: 27, name: "sachin", id: 1, sex: "male", dept: "angular"},
        {age: 22, name: "pooja", id: 2, sex: "female", dept: "java"},
        {age: 50, name: "john", id: 3, sex: "male", dept: "sales"}
    ]
    this.updatedData = [
        {id: 1, name: "sachin", age: 25, sex: "male"},
        {id: 2, name: "pooja", age: 22, sex: "female"},
        {id: 3, name: "john", age: 50, sex: "male"}
    ]       

我们可以看到这两个数组中属性的顺序属性的数量是不同的。在这里,我应该如何比较只匹配的属性,是否有任何属性发生了变化。在上面的例子中,当与originalData比较时,我需要从updatedData中获取id 1的对象,因为age属性从27变为25。不匹配的属性可以忽略。

我尝试了下面的方法,但由于差异而无效

  if(JSON.stringify(this.updatedData) !== JSON.stringify(this.originalData)) {
      console.log('changed!');
  }

请给予建议。谢谢。

0
0 Comments

比较两个对象数组的问题出现的原因是希望筛选出在两个数组中具有至少一个不匹配属性的对象。解决方法是使用filter和find函数对数组进行筛选和比较。

首先,给定两个对象数组originalData和updatedData。originalData包含了一组原始数据,updatedData包含了更新后的数据。

使用filter函数对updatedData进行筛选,通过比较id属性来找出originalData和updatedData中具有相同id的对象。在filter函数中,使用find函数在originalData中寻找与当前updatedData对象具有相同id的对象,即找出两个数组中具有共同id的对象。

接下来,使用Object.keys函数获取commonDataRow对象的属性列表,并使用every函数遍历这些属性。对于每个属性,首先检查updatedData对象是否具有该属性,如果存在则比较commonDataRow和updatedData对象的该属性值是否相等,如果相等则返回true,否则返回false。

最后,返回结果为false的对象,即在两个数组中具有至少一个不匹配属性的对象。输出结果为满足条件的对象数组。

以上是比较两个对象数组的问题的解决方法,通过上述代码可以得到满足条件的对象列表。

0
0 Comments

问题的出现原因:

该问题的出现是因为需要比较两个对象数组中的对象,只基于匹配的属性进行比较。在给定的代码片段中,有一个原始数据数组(originalData)和一个更新后的数据数组(updatedData),需要找出原始数据数组中属性改变了的对象。

解决方法:

为了解决这个问题,可以使用以下步骤进行比较:

1. 创建一个空数组 changedList,用于存储属性改变了的对象。

2. 使用 map() 方法遍历原始数据数组 originalData 中的每个对象。

3. 在每次遍历时,使用 filter() 方法从更新后的数据数组 updatedData 中找到与当前遍历对象具有相同 id 的对象。

4. 使用变量 temp 存储筛选出的对象数组中的第一个对象。

5. 创建一个变量 same,并将其初始值设为 true。

6. 使用条件语句检查每个属性是否存在且其值是否相等,如果不相等,将 same 设置为 false。

7. 如果 same 为 false,将当前遍历对象添加到 changedList 数组中。

8. 打印每次遍历的 same 变量的值。

9. 最后,打印 changedList 数组,其中包含原始数据数组中属性改变了的对象。

通过以上步骤,可以比较两个对象数组,并找出原始数据数组中属性改变了的对象。

0