javascript - 期望数组相等而忽略顺序

标签 javascript jasmine karma-jasmine

Jasmine 有没有办法测试 2 个数组是否包含相同的元素,但不一定按相同的顺序排列?即

array1 = [1,2,3];
array2 = [3,2,1];

expect(array1).toEqualIgnoreOrder(array2);//should be true

最佳答案

编辑

Jasmine 2.8 添加了 arrayWithExactContents,如果实际值是一个包含示例中任意顺序的所有元素的数组,它将成功。

参见 keksmasta's answer


原始(过时)答案

如果只是整数或其他原始值,你可以sort()比较之前。

expect(array1.sort()).toEqual(array2.sort());

如果它的对象,将它与map()结合起来用于提取将要比较的标识符的函数

array1 = [{id:1}, {id:2}, {id:3}];
array2 = [{id:3}, {id:2}, {id:1}];

expect(array1.map(a => a.id).sort()).toEqual(array2.map(a => a.id).sort());

关于javascript - 期望数组相等而忽略顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32103252/

相关文章:

javascript - javascript逻辑分配如何工作?

javascript - 如何以特定格式获取 Javascript 当前日期秒

javascript - CSS 问题使用 Karma + Jasmine 测试 AngularJS 指令

selenium-webdriver - Protractor :在不知道文件名的情况下测试下载文件

javascript - Jasmine - jasmine-jquery spyOnEvent

javascript - 无法让 ngRoute 正确路由

javascript - ui-mask 的 Angular js 指令的单元测试

javascript - 如何模拟事件并将其传递给 Jasmine 测试中的方法?

javascript - Jasmine 测试给出错误 "Uncaught ReferenceError: require is not defined"

javascript - For loop let scope stackblitz vs chrome 开发工具