Saya memiliki larik [1,1,1,1,2,3,4,5,5,6,7,8,8,8]

Bagaimana saya bisa mendapatkan array duplikat yang berbeda [1,5,8] - setiap duplikat dalam hasil hanya sekali, terlepas dari berapa kali itu muncul di array asli

Kode saya:

var types = availControls.map(item => item.type);
var sorted_types = types.slice().sort();

availControlTypes = [];
for (var i = 0; i < sorted_types.length - 1, i++) {
   if (sorted_types[i + 1] == sorted_types[i])
   availControlTypes.push(sorted_types[i]);
}

Ini memberi saya duplikat, tetapi tidak unik.

2
full-stack 28 Oktober 2019, 23:43

4 jawaban

Jawaban Terbaik

Ini akan berhasil

var input = [1, 1, 1, 1, 2, 3, 4, 5, 5, 6, 7, 8, 8, 8];

let filterDuplicates = arr => [...new Set(arr.filter((item, index) => arr.indexOf(item) != index))]


console.log(filterDuplicates(input)) 
1
Mike Ezzati 28 Oktober 2019, 20:59

ES6 1 kapal. Ini sangat mirip dengan cara kami menemukan nilai unik, kecuali alih-alih memfilter untuk kemunculan pertama, kami memfilter untuk kemunculan kedua.

let nthOccurrences = (a, n = 1) => a.filter((v, i) => a.filter((vv, ii) => vv === v && ii <= i).length === n);

let x = [1, 1, 1, 1, 2, 3, 4, 5, 5, 6, 7, 8, 8, 8];

let uniques = nthOccurrences(x, 1);
let uniqueDuplicates = nthOccurrences(x, 2);
let uniqueTriplets = nthOccurrences(x, 3); // unique values with 3 or more occurrences

console.log(JSON.stringify(uniques));
console.log(JSON.stringify(uniqueDuplicates));
console.log(JSON.stringify(uniqueTriplets));
0
junvar 28 Oktober 2019, 21:01

Anda memerlukan for loop, dengan objek yang akan menampung berapa kali angka muncul dalam array. Ketika hitungan sudah 1, kita bisa menambahkan item ke hasil. Kita harus terus menambah penghitung, jadi kita tidak akan menambahkan lebih dari satu duplikat dari nomor yang sama (walaupun kita bisa berhenti di 2).

function fn(arr) {
  var counts = {};
  var result = [];
  var n;
  
  for(var i = 0; i < arr.length; i++) {
    n = arr[i]; // get the current number
    
    if(counts[n] === 1) result.push(n); // if counts is exactly 1, we should add the number to results
    
    counts[n] = (counts[n] || 0) +1; // increment the counter
  }
  
  return result;
}

var arr = [1, 1, 1, 1, 2, 3, 4, 5, 5, 6, 7, 8, 8, 8];

var result = fn(arr);

console.log(result)
1
Ori Drori 28 Oktober 2019, 20:51
const dupes = arr =>
  Array.from(
    arr.reduce((acc, item) => {
      acc.set(item, (acc.get(item) || 0) + 1);
      return acc;
    }, new Map())
  )
    .filter(x => x[1] > 1)
    .map(x => x[0]);

const arr = [1, 1, 1, 1, 2, 3, 4, 5, 5, 6, 7, 8, 8, 8];

console.log(dupes(arr));

// [ 1, 5, 8 ]
0
Hero Qu 28 Oktober 2019, 21:00