Liujing_6688
2021-09-17 16:38
采纳率: 100%
浏览 128
已结题

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

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

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

  • 收藏

4条回答 默认 最新

  • qq_40471785 2021-09-17 16:50
    已采纳
    
    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;
    }
    
    已采纳该答案
    1 打赏 评论
  • tonyzhangcn 2021-09-17 16:55

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

    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

    2 打赏 评论
  • weixin_44688481 2021-09-17 16:45

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

    打赏 评论
  • 峰子哥哥 2021-09-17 16:49
        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了下,具体业务看你
    如果能帮到你,请点击下【采纳】,非常感谢

    打赏 评论

相关推荐 更多相似问题