Muszę policzyć liczbę duplikatów w tablicy wielowymiarowej i ostrzec, jeśli zostaną znalezione duplikaty.

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

Sugestie: Zliczanie można wykonać w ten sposób, że jeśli pozycja arr[0] jest równa kolejnym nadchodzącym pozycjom, to musi dać liczbę i musi sprawdzić tę samą kombinację wartości. A potem dla pozycji arr[1], aby sprawdzić następne nadchodzące pozycje i tak dalej dla innej pozycji do ostatniej

Liczy tylko dokładną kombinację Jak [3,"df"] na drugiej pozycji równej [3,"df"] na czwartej kombinacji

Oczekiwana liczba wyjść: 1 Alert znaleziono zduplikowane dane

0
prashant tiwari 13 czerwiec 2021, 01:55

4 odpowiedzi

Najlepsza odpowiedź

Moja odpowiedź z oryginalnego pytania (z wyjątkiem tego, że mam trzy elementy, takie jak [3, "df"] w tablicy wejściowej) jest:

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

Jeśli liczba dla [[3,"df"],[3,"df"],[3,"df"]] powinna wynosić jeden zamiast dwóch, to może coś takiego:

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);
0
Ben Stephens 13 czerwiec 2021, 05:39

Możesz użyć forEach, aby iterować tablicę, a następnie filtrować i sprawdzać długość, jeśli znaleziono więcej niż 1, ustawić wpis w Mapie, który zawiera parę klucz-wartość i zachowa 1 wpis dla tego samego klucza, a następnie możesz sprawdzić rozmiar.

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`);
0
Rajdeep Debnath 12 czerwiec 2021, 23:20

Możesz map połączyć liczby i ciągi, a następnie sort. Na koniec reduce tablica do liczby duplikatów.

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'}`);
0
Guerric P 12 czerwiec 2021, 22:59
    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');
0
Kinglish 12 czerwiec 2021, 23:19