js 数组求交集+ js判断两个对象是否相等的方法

js 数组求交集+ js判断两个对象是否相等的方法

数组求交集的方法

// 求交集let arr1 = [1, '123', { name: 'qiao' }, 123];let arr2 = [12, 123, '123', '1', { name: 'qiao' }, { name: '101' }];// 不能判断对象是否相等let result = [...new Set(arr1)].filter(item => new Set(arr2).has(item));//[123,'123']

js判断两个对象是否相等的方法

方法一:

通过JSON.stringify(obj)来判断两个对象的字符串形式是否相等

优点:用法简单,对于顺序相同的两个对象可以快速进行比较得到结果
缺点:这种方法有限制,当两个对比的对象中key的顺序不是完全相同时会比较出错

方法二:

Object.getownPropertyNames()

1.用Object.getOwnPropertyNames拿到对象的键名数组
2.比对键名数组的长度是否相等
3.比对键名对应的键值是否相等

缺点:对象属性值是对象的情况要进行递归

function isObjectValueEqual(a, b) {    let aProps = Object.getOwnPropertyNames(a);    let bProps = Object.getOwnPropertyNames(b);    if (aProps.length !== bProps.length) {        return false;    }    for (let i = 0; i < aProps.length; i++) {        // 得到a的属性名        let propName = aProps[i]        let propA = a[propName]//得到a的属性propName的值        let propB = b[propName]//得到b的属性propName的值,如果没有,则为undefined        // 这里忽略了值为undefined的情况        // 故先判断两边都有相同键名        if (!b.hasOwnProperty(propName)) return false//hasOwnProperty指示对象自身属性中是否具有指定的属性        if ((propA instanceof Object)) {            if (!this.isObjectValueEqual(propA, propB)) {                return false            }        } else if (propA !== propB) {            return false        }    }    return true}

数组求交集,可以判断对象是否相等

let result = [...new Set(arr1)].filter(item => {    let set2 = new Set(arr2)    let iterator = set2.values()    if (item instanceof Object) {        let i = iterator.next().value;        while (i) {            if (!(i instanceof Object)) { i = iterator.next().value; continue; }            if (!isObjectValueEqual(i, item)) { i = iterator.next().value; continue; }            if (isObjectValueEqual(i, item)) { return true }        }    } else {        if (set2.has(item)) return true;    }    return false;});//输出 ['123', {name: 'qiao'}, 123]
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部