当前位置: 代码迷 >> JavaScript >> js 对象的数组 比较 ,若不同,则 回到对象的key
  详细解决方案

js 对象的数组 比较 ,若不同,则 回到对象的key

热度:614   发布时间:2013-03-06 16:20:31.0
js 对象的数组 比较 ,若不同,则 返回对象的key

var oldObj = {key:old[]} , newObj = {key:new[]} ;
//如果 newObj{new[]} 不等于 oldObj {old[]} 取出 key

------解决方案--------------------

var equal = function(o1, o2){
    //null undefined NaN Number Date String Array Object RegExp 本函数只判断了这些类型
    //Function Math Element 这些类型不做判断
    var b;
    if(o1 == null && o1 === o2) return true;
    if(o1 == null 
------解决方案--------------------
 o2 == null) return false;
    if(o1.constructor != o2.constructor) return false;
    if(o1 instanceof Date 
------解决方案--------------------
 o1.constructor == Number) return o1 - o2 == 0;
    if(o1 instanceof Array){
        b = o1.length == o2.length;
        if(b)for(var i = o1.length - 1; i >= 0; i--){
            if(!b) return b;
            b = b && equal(o1[i], o2[i])
        }
        return b
    }
    if(o1.constructor == String) return o1.localeCompare(o2) == 0;
    if(o1 instanceof RegExp) return o1.source == o2.source && o1.global == o2.global && o1.ignoreCase == o2.ignoreCase && o1.multiline == o2.multiline;
    var k1 = [], k2 = [];
    for(var p in o1) if(o1.hasOwnProperty(p)) k1.push(p);
    for(var p in o2) if(o2.hasOwnProperty(p)) k2.push(p);
    b = k1.length == k2.length;
    if(b)for(var i = k1.length - 1; i >= 0; i--){
        if(!b) return b;
        b = b && equal(o1[k1[i]], o2[k2[i]])
    }
    return b;
},
distinct = function(o1, o2){
    var b = [], t = {};
    if(typeof o1 != 'object' 
------解决方案--------------------
 typeof o2 != 'object') return b;
    var k1 = [], k2 = [];
    for(var p in o1) if(!(o1[p] instanceof Function)) k1.push(p);
    for(var p in o2) if(!(o2[p] instanceof Function)) k2.push(p);
    for(var i = k1.length - 1; i >= 0; i--)if(!equal(o1[k1[i]], o2[k1[i]])) t[k1[i]] = 1;
  相关解决方案