对象数组的相等性,与按索引而不是按索引无关

时间:2018-09-19 06:40:24

标签: javascript angular ecmascript-6 jasmine

我正在使用以下版本:

"jasmine-core": "~2.8.0", 
"jasmine-spec-reporter": "~4.2.1", 
"karma-jasmine": "~1.1.0", 
"karma-jasmine-html-reporter": "^0.2.2", 
"@types/jasmine": "~2.8.3",

称我为愚蠢,但我需要这个。通过价值平等而不是通过参考

function isEqual(var1, var2) {
  //....
  // return true or false
}

测试:

isEqual(1,1) // true
isEqual("Test", "Test") // true
isEqual([1,2,3], [3,2,1]) // true   => irrespective of array index
isEqual({a:1, b:2}, {b:2, a:1}) // true
isEqual([{a:1}, {b:2}], [{b:2}, {a:1}]) // true
isEqual([1,2, {a:{b:2}}], [2,1, {a:{b:2}}]) // true
isEqual([{a:[1,2], b:10}], [{b:10, a:[2,1]}]) // true

背景:我正在使用Jasmin进行Angular测试。检查时遇到困难 值相等的对象。 expect().toEqual()检查对象类型是否相等。我想比较对象数组,而不管数组索引如何。

我得到的是

expect([{ a: 1 }, { b: 2 }]).toEqual([{ a: 1 }, { b: 2 }]); // true 
expect([{ a: 1 }, { b: 2 }]).toEqual([{ b: 2 }, { a: 1 }]); // false 

我想要的是:

expect([{ a: 1 }, { b: 2 }]).toEqual([{ a: 1 }, { b: 2 }]); // true 
expect([{ a: 1 }, { b: 2 }]).toEqual([{ b: 2 }, { a: 1 }]); // true

1 个答案:

答案 0 :(得分:0)

尝试toDeepEqual

expect([{ a: 1 }, { b: 2 }]).toDeepEqual([{ a: 1 }, { b: 2 }]);
expect([{ a: 1 }, { b: 2 }]).toDeepEqual([{ b: 2 }, { a: 1 }]);