需要在多维数组中查找或计算重复项

IT技术 javascript node.js arrays json reactjs
2021-05-24 05:00:49

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

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

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

只计算第二个位置的精确组合,如 [3,"df"] 等于第四个组合的 [3,"df"]

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

4个回答

我的回答从原来的问题(除了我已经有三个项目,如[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);

您可以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'}`);

    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');

您可以使用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`);