【问题标题】:Need to find or count duplicates in multidimensional array需要在多维数组中查找或计算重复项
【发布时间】:2021-08-29 08:59:49
【问题描述】:

我需要计算多维数组中重复的数量,并在发现重复时发出警报。

Arr =[[2,"sk"],[3,"df"],[7,"uz"],[3,"df"],[7,"gh"]]

建议: 可以通过这种方式进行计数,如果 arr[0] 位置等于下一个位置,那么它必须给出一个计数并且需要检查两个值的组合是否相同。 然后为 arr[1] 位置检查下一个位置,依此类推,直到最后一个位置

只计算确切的组合 喜欢 [3,"df"] 在第二个位置等于 [3,"df"] 第四种组合

预期输出计数:1 发现警报重复数据

【问题讨论】:

  • [[2,"sk"],[2,"sk"],[3,"df"],[3,"df"],[3,"df"]] 的计数是多少?

标签: javascript node.js arrays json reactjs


【解决方案1】:

我的answer 来自原始问题(除了我在输入数组中有三个类似[3, "df"] 的项目)是:

const input = [
  [2, "sk"], [3, "df"], [7, "uz"], [3, "df"], [7, "gh"],
  [5, "df"], [21, "sk"], [2, "1sk"], [3, "df"]
];

const duplicate_count = input.length - new Set( input.map(JSON.stringify) ).size;

console.log(duplicate_count);

如果[[3,"df"],[3,"df"],[3,"df"]] 的计数应该是一个而不是两个,那么可能是这样的:

const input = [
  [2, "sk"], [3, "df"], [7, "uz"], [3, "df"], [7, "gh"],
  [5, "df"], [21, "sk"], [2, "1sk"], [3, "df"]
];

const duplicate_count = [
  ...input
    .map(JSON.stringify)
    .reduce( (acc, v) => acc.set(v, (acc.get(v) || 0) + 1), new Map() )
    .values()
].filter((v) => v > 1).length;

console.log(duplicate_count);

【讨论】:

    【解决方案2】:

    你可以map 连接数字和字符串,然后sort。最后,reduce 数组到重复计数。

    const input = [
      [2, "sk"],
      [3, "df"],
      [7, "uz"],
      [3, "df"],
      [7, "gh"],
      [7, "df"],
    ];
    
    const result = input
      .map(([number, string]) => number + string)
      .sort()
      .reduce(
        (acc, cur, i, { [i - 1]: last }) => (cur === last ? acc + 1 : acc),
        0
      );
    
    console.log(`Count: ${result}${result && ' Alert duplicate data found'}`);

    【讨论】:

      【解决方案3】:

          let arr =[[2,"sk"],[3,"df"],[7,"uz"],[3,"df"],[7,"gh"],[2,"sk"],[7,"uz"]]
          
          function getNumDupes(a) {
             return a.length-
          arr.reduce((b,a)=>{if (!b.includes(a.join(""))) b.push(a.join("")); return b;},[]).length 
          }
          
          console.log(getNumDupes(arr) + ' duplicates found');

      【讨论】:

        【解决方案4】:

        您可以使用forEach 来迭代数组,然后过滤并检查长度(如果发现大于 1),在 Map 中设置一个包含键值对的条目,并将为同一个键保留 1 个条目,然后可以检查大小.

        let arr =[[2,"sk"],[3,"df"],[7,"uz"],[3,"df"],[7,"gh"]];
        
        let map = new Map();
        arr.forEach(e1 => 
                         arr.filter(e2 => e1[0]===e2[0] && e1[1]===e2[1]).length > 1
                         ? map.set(`${e1[0]}-${e1[1]}`,1) 
                         : null
                    );
        
        console.log(`${map.size} duplicate found`);

        【讨论】:

          猜你喜欢
          • 2019-08-16
          • 2012-11-02
          • 2021-08-29
          • 2019-06-16
          • 2014-01-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多