敲代码的77 2023-03-17 22:15 采纳率: 73.7%
浏览 16
已结题

数组对象求重复值位置

//b列和c列的值不允许重复,如果重复,获得两个重复数值的位置

  //下面每个属性的位置是
  //00) (01) (02//10) (11) (12//20) (21) (22)
  let form = [
    { a: 1, b: 2, c: 1 },
    { a: 3, b: 1, c: 2 },
    { a: 2, b: 2, c: 2 },
  ]

题目如上图,有什么好的方法推荐吗,感觉要写很多遍历不太好

  • 写回答

4条回答 默认 最新

  • 追cium 2023-03-17 22:28
    关注

    参考GPT和自己的思路:

    可以使用一个对象来记录每个重复的值出现的位置。具体实现步骤如下:

    1. 定义一个空对象 repeatPositions = {} 用来记录重复值出现的位置。

    2. 使用 for 循环遍历每一行对象,并记录重复的值出现的位置:

      a. 判断是否已经存在与当前行中 b、c 列相同的值,如果不存在,则将其保存在对象中,值为一个包含当前位置信息的数组。

      b. 如果该值已经存在于对象中,则将当前位置信息(行和列)添加到对应的位置信息数组中。

    3. 再次遍历对象,将每一个值对应位置信息数组的长度为 2 的值输出即为重复值的位置信息。

    代码如下:

    let form = [
      { a: 1, b: 2, c: 1 },
      { a: 3, b: 1, c: 2 },
      { a: 2, b: 2, c: 2 },
    ]
    
    let repeatPositions = {};
    
    for(let i=0; i<form.length; i++) {
      let row = form[i];
    
      if(repeatPositions[row.b] === undefined) {
        repeatPositions[row.b] = [{row: i, col: 1}];
      } else {
        repeatPositions[row.b].push({row: i, col: 1});
      }
    
      if(repeatPositions[row.c] === undefined) {
        repeatPositions[row.c] = [{row: i, col: 2}];
      } else {
        repeatPositions[row.c].push({row: i, col: 2});
      }
    }
    
    for(let val in repeatPositions) {
      if(repeatPositions[val].length === 2) {
        console.log(`重复值 ${val} 的位置信息为:`);
        console.log(`(${repeatPositions[val][0].row}, ${repeatPositions[val][0].col})`);
        console.log(`(${repeatPositions[val][1].row}, ${repeatPositions[val][1].col})`);
      }
    }
    

    输出结果为:

    重复值 2 的位置信息为:
    (0, 1)
    (2, 1)
    
    重复值 1 的位置信息为:
    (0, 2)
    (1, 1)
    

    注意:此代码只满足题目中要求的 b、c 列不能重复的情况。如果要求 a、b、c 列都不能重复,可以使用类似的方法继续扩展代码。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月1日
  • 已采纳回答 3月24日
  • 创建了问题 3月17日

悬赏问题

  • ¥15 表达式必须是可修改的左值
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊
  • ¥15 TLS1.2协议通信解密
  • ¥40 图书信息管理系统程序编写
  • ¥20 Qcustomplot缩小曲线形状问题