js 判断一个数组中所有对象的其中两个属性值是否相同

let arr = [
       {name: '张三',sex:男},
       {name: '李四',sex:女},
       {name: '王五',sex:女},
       {name: '张三',sex:男},
          ],

这个数组里可能会有很多数据。
我需要判断其中两个对象中name属性值和sex属性值是否相同,只要其中两个属性值都相同,就返回true,否则返回false。(并不是只跟第一个或第二个相比较,是所有的对象都要相互比较)


function judge() {
    for(let i = 0; i < arr.length; i++) {
        for(let key  in arr[i]){
          if(arr.filter(item => item[key] == arr[i][key]).length > 1) {
                return true;
            }
        }
    }
    return false;
}

直接上代码吧,亲测可行:

let arr = [{name: '张三',sex:'男'},{name: '李四',sex:'女'},{name: '王五',sex:'女'},
{name: '张三',sex:'男'}];
    
let name_sex = arr.map(v=>{return `${v.name}-${v.sex}`});
let name_sex_set = new Set(name_sex);

return name_sex.length != name_sex_set.size;

解释一下原理:
1.因为要判定name 和sex 的重复性,所以可以先把它们摊平拼接,这样的出来的数据个数跟原来的数组长度一致。
2.将1中得到的数组转换成set,因为set是里边的每个对象都要求唯一,因此会把重复的name sex组合剔除掉,所以如果有重复的,那么得到的set长度肯定就比1中的数组小了。
3. 比较1中数组的长度和2中set的长度,如果不一致说明有重复的,返回true

直接循环判断呀,可能会比较麻烦一点,但是简单粗暴

    arr.forEach((item, index) => {
        arr.forEach((item2, index2) => {
            if (item.name === item2.name && item.sex === item2.sex && index !== index2) {
                console.log(item.name + ":true");
            }
        })
    })

是所有的对象都要相互比较,那么返回true或者false是返回给谁,判断到有一个就通过return返回还是都判断完 依次赋值到重复的对象上,我这里只是console了下,具体业务看你
如果能帮到你,请点击下【采纳】,非常感谢