假设现在有两个以下的数组
let arr1 = [1,2,3,4]
let arr2 = [1,2,3,5]
你现在需要去比较这两个数组是否相等,我来分享一下我的做法,主要是栈的做法来完成这个需求.
if (!Array.isArray(arr1) ||!Array.isArray(arr2) ||arr1.length !== arr2.length) {
return false;
}
const queue = [{ arr1, arr2 }];
while (queue.length) {
let shift = queue.shift();
let first = shift.arr1.shift();
let second = shift.arr2.shift();
if (first === second ) {
if (shift.arr1.length > 0 && shift.arr2.length > 0) {
queue.push({
arr1: [...shift.arr1],
arr2: [...shift.arr2],
});
}
} else {
return false;
}
}
return true;
这样就完成了两个数组之间的比较,但实际上我们在工作中,可能需要比较的是两个json对象,例如你在做某个富文本编辑的模块的时候,用户在输入然后点击"返回"按钮时,你可能需要提示用户,"还没有保存是否需要离开"的字眼,它的本质就是用当前的输入对象和你进来时深拷贝的对象是否相等.
假设现在有以下两个数组对象:
let arr1 = [{ name: "1" }, { name: "2" }, { name: "3" }, { name: "4" }];
let arr2 = [{ name: "1" }, { name: "2" }, { name: "3" }, { name: "4" }];
function compareFun(arr1, arr2, func) {
if (!func) {
func = defaultCompare;
}
if (
!Array.isArray(arr1) ||
!Array.isArray(arr2) ||
arr1.length !== arr2.length
) {
return false;
}
const queue = [{ arr1, arr2 }];
while (queue.length) {
let shift = queue.shift();
let first = shift.arr1.shift();
let second = shift.arr2.shift();
if (func(first, second)) {
if (shift.arr1.length > 0 && shift.arr2.length > 0) {
queue.push({
arr1: [...shift.arr1],
arr2: [...shift.arr2],
});
}
} else {
return false;
}
}
return true;
function defaultCompare(a, b) {
return a === b;
}
}
let compareFun1 = function (a, b) { // 自定义的比较函数
return a.name === b.name;
};
console.log(compareFun(arr1, arr2, compareFun1));