最近做图片上传时,当修改图片时会用到判断两个数组是否相同。虽然最近没有采取比较两个数组是否相同,但也因此研究了下比较两个数组是否相同的方法,首页在网上查了一下相关资料更多的是用到数组转化为字符串进行比较,代码如下:
const arr1 = [1,2,3];
const arr2 = [1,3,2];
console.log(arr1.sort().toString() == arr2.sort().toString()) // true
上面的方法只能进行简单数组的比较不够全面,所以自己查找总结了下面的方法:
function compareArray(arr1, arr2) {
let tempArray = Array.from(arr2)
if (arr1 instanceof Array && arr2 instanceof Array) {
return arr1.length == arr2.length && arr1.every(item => {
let delIndex = 0
let result = false
if (isNaN(item)) {
result = tempArray.some((item_2, index) => {
if (isNaN(item_2)) {
delIndex = index
return true
}
return false
})
} else {
delIndex = tempArray.indexOf(item)
result = delIndex != -1
}
tempArray.splice(delIndex, 1)
return result
})
} else {
return false
}
}
const obj = {}
const arr = []
const nan = NaN
const a = [1, 2, 3, obj, arr, nan]
const b = [obj, arr, 3, 2, 1, nan]
console.log('compareArray:', compareArray(a, b)) // compareArray: true
随便也附带总结了判断两个对象是否相同的方法,代码如下:
function compareObj(obj1, obj2) {
if (obj1 === obj2) {
return true
}
if (! (obj1 instanceof Object) || ! (obj2 instanceof Object)) {
return false
}
if ( obj1.constructor !== obj2.constructor) {
return false
}
for (var p in obj1) {
if (obj1.hasOwnProperty(p)) {
if (!obj2.hasOwnProperty(p)) {
return false
}
if (obj1[p] === obj2[p]) {
continue
}
if (typeof obj1[p] !== 'object') {
return false
}
}
}
for (var p in obj2) {
if (obj1.hasOwnProperty(p) && !obj2.hasOwnProperty(p)) {
return false
}
}
return true
}
const obj = {name: 'dean', age: 18}
const obj2 = {age: 18, name: 'dean'}
console.log('compareObj:', compareObj(obj, obj2)) // compareObj: true