Вы должны сделать его рекурсивным, если элемент является другим массивом.
Также нет смысла проверять, равны ли элементы, когда длины не совпадают.
Это будетТакже будет лучше, если вы отключите функцию сравнения.Мне пришлось сделать это условным от того, был ли указан аргумент testName
, чтобы он не регистрировался во время всех рекурсивных вызовов.
function assertArraysEqual(actual, expected, testName) {
var areEqualLength = actual.length === expected.length;
var areEqualItems = areEqualLength && actual.every(function(item, i) {
if (Array.isArray(item) && Array.isArray(expected[i])) {
return assertArraysEqual(item, expected[i]);
} else {
return item === expected[i]
}
});
if (testName) {
if (areEqualItems) {
console.log('passed');
} else {
console.log('FAILED [' + testName + '] Expected ' + expected + ', but got ' + actual);
}
}
return areEqualItems;
}
var arr1 = [0, 1, 2, 3];
var arr2 = [0, 1, 2, 3];
var arr3 = [
[0, 1, 2, 3],
[0, 1, 2, 3]
];
var arr4 = [
[0, 1, 2, 3],
[0, 1, 2, 3]
];
var arr5 = [
[0, 1, 2, 3],
[0, 2, 3, 4]
];
assertArraysEqual(arr1, arr2, 'arrays should be equal'); // passed
assertArraysEqual(arr3, arr4, 'arrays should be equal'); // FALIED [arrays should be equal] Expected 0,1,2,3,0,1,2,3, but got 0,1,2,3,0,1,2,3
assertArraysEqual(arr3, arr5, 'arrays should not be equal');