【问题标题】:Compare Arrays javascript with different values比较具有不同值的数组 javascript
【发布时间】:2022-01-14 14:14:25
【问题描述】:

我正在尝试比较第一个数组响应如下的 2 个数组:

response= [
      {    
        organization: {
          id: '75f1e2e1-83eb-484e-bdaf-1da9b57c635d'   
      },
      {    
        organization: {
          id: '810d0465-2917-4d67-802a-69cda41647ad'
        
      }
    ]

第二个数组

expectedResponse=  

 [
          {      
            organization: {
              id: '810d0465-2917-4d67-802a-69cda41647ad'
            
          },
            organization: {
              id: '75f1e2e1-83eb-484e-bdaf-1da9b57c635d'   
          }  
        ]

我编写的用于比较 2 个数组的断言函数如下

response.body.forEach(function (index) {      
       expect(response.body[index].organization.id).to.eql(
        expectedResponse[index].organization.id
       );

但由于 AssertionError: expected '75f1e2e1-83eb-484e-bdaf-1da9b57c635d' to deeply equal '810d0465-2917-4d67-802a-69cda41647ad' 而失败

由于 org id 的每个数组中的顺序不同。我如何比较顺序是否不同以使此断言通过

【问题讨论】:

  • 您的对象格式错误
  • @T.J.Crowder 有多余(或缺失)的大括号
  • 如果排序无关紧要,您是否尝试过使用“.to.deep.include”而不是“to.eql”?
  • @AlexSp3 - 确实有。 :-) 我怎么看不到呢?

标签: javascript mocha.js chai


【解决方案1】:

正如你所说,由于顺序不同,你不能一次通过。

您至少有几个选项,每个选项在检查数组是否具有相同长度后都会执行(因为如果它们不匹配,则它们彼此不匹配):

  1. 对数组进行排序(如果对原始数组排序不正确,请先复制它们),然后使用您必须比较的结果,因为那时它们的顺序相同。

  2. 以与顺序无关的方式查找匹配项,例如:

    • 使用 findIndexfind 循环遍历数组 A 以查看数组 B 的每个值
    • 从数组 A 中构建 id 值的 Set,然后循环遍历数组 B,确保它们都在集合中

(同样,在这两种情况下,您首先要确保它们具有相同的长度。)

您可能还希望确保 id 值是唯一的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多