判断两个数组是否相等(包括数组里边的键值对是否相等)

// 1.判断是否为空
let isNotBlank = value => {
    if (value === null || value === undefined || value !== value ||
        value === 'null' || value === 'undefined' || value === 'NaN' || value === '') {
        return false;
    } else {
        let jsonStr = null;
        try {
            jsonStr = JSON.stringify(value);
        } catch (error) {
            jsonStr = ""
        }
        if (jsonStr === "{}") {
            return false;
        }
        return true;
    }
}

// 2.判断两个数组是否相等(包括数组里的键值是否相等)
let oldArr = [1,2,3];
let newArr = [1,3,2];
Array.prototype.equals = function(array, key, order) {
	// array--要比较的数组(必需)
	// key--如果数组里边包裹着对象,则可以比较对象的某个键值对(可选)
	// order--数组中的顺序是否可以打乱(可选)
    if (!array instanceof Array) return false; 
    if (this.length != array.length) return false;
    if(order) {// 顺序要求一致
    	for (let i = 0; i < this.length; i++) {
    	    if (isNotBlank(key)) {
    	        if (this[i][key] !== array[i][key]) {
    	            return false;
    	            break;
    	        }
    	    } else {
    	        if (this[i] !== array[i]) {
    	            return false;
    	            break;
    	        }
    	    }
    	}
    } else {// 顺序可以不一致
	    for (let i = 0; i < this.length; i++) {
	    	let log = false;
	        for(let j = 0; j < array.length; j++) {
	        	if(isNotBlank(key)) {
	        		if (this[i][key] === array[j][key]) {
	        		    log = true;
	        		    break;
	        		}
	        	} else {
		        	if(this[i] === array[j]) {
						log = true;
						break;
		        	}
	        	}
	        }
	        if(!log) {
	        	return false;
	        	break;
	        }
	    }
    }
    return true;    
}
Object.defineProperty(Array.prototype, "equals", {enumerable: false});

console.log(oldArr.equals(newArr));// true;
console.log(oldArr.equals(newArr, null, true))// false

  

原文地址:https://www.cnblogs.com/youngboy-front/p/9138596.html