当前位置: 首页 > 知识库问答 >
问题:

javascript-根据对象的长度比较两个对象数组

朱毅
2023-03-14

我有2个对象数组和2个如果条件

    if(JSON.stringify(this.updatedData) !== JSON.stringify(this.originalData) && this.updatedData.length === this.originalData.length) {            
        this.customAttributes = editedCustomAttributes;
        this.customAttributes.forEach(function (element) {
          element.action = "edit";
        });
    }
      
    if (JSON.stringify(this.updatedData) !== JSON.stringify(this.originalData) && his.updatedData.length !== this.originalData.length) {
        const items = this.updatedData.filter(item => item.attributeId == null);
        items.forEach(function (element) {
          element.action = "add";
        });
    }

编辑网格行时,原始数据updatedData将具有相同的长度,因此第一个if条件执行。当我添加新行时,updatedData长度将超过原始数据,因此第二个如果条件执行。

但我有一种情况,用户可以添加一个新行,然后立即编辑一个现有行。在那个特定的场景中,我需要执行if条件,并且我停留在那里。我们将听取任何建议。谢谢

共有1个答案

谢昊乾
2023-03-14

您可以尝试以下方法:

function check() {
  const original = JSON.stringify(originalData)

  if (originalData.length !== updatedData.length) {
    // If lengths are not equal then new rows were added
    addedAction()

    // Check the two arrays again without those new rows
    const newRows = updatedData.length - originalData.length
    if (JSON.stringify(updatedData.slice(0, -newRows)) !== original) {
      editedAction()
    }

  } else if (JSON.stringify(updatedData) !== original) {
    editedAction()
  }

}

addedAction()editedAction()函数正是对编辑或添加的响应。

在执行添加和编辑的情况下,由于长度不同,将首先执行addedAction()。然后根据updateData的一部分检查originalData,如果删除新添加的行后它们不相同,则执行editedAction()函数。

以下是三种情况的示例:

function check() {
  const original = JSON.stringify(originalData)

  if (originalData.length !== updatedData.length) {
    // If lengths are not equal then new rows were added
    addedAction()

    // Check the two arrays again without those new rows
    const newRows = updatedData.length - originalData.length
    if (JSON.stringify(updatedData.slice(0, -newRows)) !== original) {
      editedAction()
    }

  } else if (JSON.stringify(updatedData) !== original) {
    editedAction()
  }

  console.log('')
}

function editedAction() {
  console.log('Edited')
}

function addedAction() {
  console.log('Added')
}

console.log('First case:')
let originalData = [{ name: 'a' }, { name: 'b' }]
let updatedData = [{ name: 'a' }, { name: 'b' }, { name: 'd' }, { name: 'asd' }]
check()

console.log('Second case:')
originalData = [{ name: 'a' }, { name: 'b' }]
updatedData = [{ name: 'a' }, { name: 'TEST' }]
check()

console.log('Third case:')
originalData = [{ name: 'a' }, { name: 'b' }]
updatedData = [{ name: 'a' }, { name: '123' }, { name: 'test2' }]
check()
.as-console-wrapper { min-height: 100% }
 类似资料:
  • 在爪哇中。如果我们必须将一个对象与另一个对象进行比较。我们比较该对象中的每个字段。 学生 1 对象具有标记 1、标记 2、标记 3、名称、年龄作为字段。学生 2 对象具有标记 1、标记 2、标记 3、名称、年龄作为字段。因此,要检查2名学生是否相等...我们比较每个字段。 但是,如果 Student 对象有许多字段,该怎么办?学生1对象有标记1,标记2,标记3,名称,年龄,地址,颜色,类,国家,部

  • 问题内容: 我想比较两个JavaScript对象数组,以查看它们是否相同。每个数组中的对象可能不会(并且很可能不会)以相同的顺序排列。每个数组最多只能有10个对象。我以为jQuery可以解决这个问题,但是我在网上找不到很多。 我知道可以使用简单的嵌套解决方案,但是有我不知道的内置函数吗? 谢谢。 问题答案: 有一个简单的方法… 如果以上返回true,则即使元素的顺序不同,两个数组也相同。 注意:仅

  • 创建一个名为“Circle”的Java类来实现Java。io。可串行化接口,并基于半径对圆进行建模。半径不能小于零。实现radius的getter和setter方法。还包括在circle类中重写toString。创建类的比较器,用于比较Circle类型的两个对象。 这就是我目前所拥有的 这是我的比较器类 我的问题是我做得对还是不对?

  • 对于PostgreSQL(v9.5),JSONB格式提供了极好的机会。但现在我只能做一个相对简单的手术; 比较两个jsonb对象;查看一个文档与另一个文档相比有什么不同或缺失。 到目前为止我所拥有的 应该返回第1行与第2行的差异: 相反,它还返回重复项(

  • 使用RestAssured,我试图比较两个JSON对象。 示例:第一个JSON来自excel,我将其作为字符串读取并存储 第二个 JSON 是返回响应对象的响应,该响应对象实际上是一个 JSON 我想将这两者作为JSON对象进行比较,因为当我将响应转换为String并尝试进行比较时,如果JSON模式的顺序发生变化,我的断言就会失败。 我尝试了将字符串转换成JSON的方法,但是没有找到任何方法。有人

  • 问题内容: 我想比较JavaScript代码中2个对象数组。这些对象共有8个属性,但是每个对象都不会有一个值,并且每个数组的大小永远都不能超过8个,因此可能要使用遍历每个对象然后查看对象的值的蛮力方法。 8个属性是执行我想做的最简单的方法,但是在实现之前,我想看看是否有人有一个更优雅的解决方案。有什么想法吗? 问题答案: 编辑:您不能在JavaScript解释器的当前基于浏览器的常见实现中重载运算