Programim dhe zhvillim, javascript, python, php, html

Filtri i grupit javascript dublikatë sipas çelësit të objektit

Unë kam një grup objektesh në Javascript

Po përpiqem të filtroj dublikatat sipas vlerës së objektit

  1. merrni dublikatë

  2. bëhuni unike

vargje shembujsh:

let array = [
{ 
    id: '001',
    name: 'aaa',
    type_id: 'a111'
},{ 
    id: '002',
    name: 'bbb',
    type_id: 'a111'
},{
    id: '003',
    name: 'ccc',
    type_id: 'a222'
},{
    id: '004',
    name: 'ddd',
    type_id: 'a333'
}];

Kjo është ajo që unë dua që grupi im të dalë si:

function 1(array, 'type_id')
[{ 
    id: '001',
    name: 'aaa',
    type_id: 'a111'
},{ 
    id: '002',
    name: 'bbb',
    type_id: 'a111'
}];

function 2(array, 'type_id')
[{ 
    id: '003',
    name: 'ccc',
    type_id: 'a222'
},{ 
    id: '004',
    name: 'ddd',
    type_id: 'a333'
}];

  • Ndani përpjekjen tuaj si një fragment pune duke përdorur <> duke demonstruar se ku keni ngecur. 07.02.2018
  • duket sikur duhet të përdorësh filtër 07.02.2018
  • Thotë: Kjo është ajo që unë dua që grupi im të dalë si Por jep një shembull i cili nuk është një Array. 07.02.2018

Përgjigjet:


1

Unë kam shkruar disa kode për të bërë ato gjëra që dëshironi të arrini:

let array = [{
  id: '001',
  name: 'aaa',
  type_id: 'a111'
}, {
  id: '002',
  name: 'bbb',
  type_id: 'a111'
}, {
  id: '003',
  name: 'ccc',
  type_id: 'a222'
}, {
  id: '004',
  name: 'ddd',
  type_id: 'a333'
}];

var duplicates = [];
var uniques = [];
var valueCounts = {};


function getDuplicatesAndUniques(array, value) {
  for (var i = 0; i < array.length; i++) {
    if (!valueCounts[array[i][value]])
      valueCounts[array[i][value]] = 1;
    else
      valueCounts[array[i][value]]++;
  }

  for (var i = 0; i < array.length; i++) {
    if (valueCounts[array[i][value]] == 1) {
      uniques.push(array[i]);
    } else {
      duplicates.push(array[i]);
    }
  }

}

getDuplicatesAndUniques(array, "type_id");

console.log(duplicates);
console.log(uniques);

https://jsfiddle.net/hbpx08xh/1/

Shpresoj se kjo ndihmon! :)

Përshëndetje

07.02.2018

2

Ju mund të merrni një Map për të njëjtën type_id dhe mblidhni objektet dhe më pas shtyni artikujt e hartës ose në unike ose në dupe, bazuar në gjatësinë e grupit.

Linja

map.forEach(a => [unique, dupes][a.length - 1 && 1].push(...a));

merr hartën dhe përsërit të gjithë elementët e saj dhe përdor një grup të synuar prej unique dhe dupes,

                 [unique, dupes]                                 // targets

merr gjatësinë e grupit të hartuar, për ndarjen e grupit të synuar

                                [a.length - 1 && 1]              // select target

Konsideroni këtë listë për marrjen e një indeksi, 0 për artikujt unikë dhe 1 për dublikatat. Gjatësia zero nuk ekziston, sepse nëse bëhet një hyrje në hartë, gjatësia është një.

length  length - 1  length - 1 && 1  comment
------  ----------  ---------------  --------
   1         0             0         take `length - 1`, because of falsy 1st operand
   2         1             1         take 2nd operand
   3         2             1         take 2nd operand
   4         3             1         take 2nd operand for all other greater length

Më pas me shpërndani sintaksën ..., të gjithë artikujt e grupit a përdoren si parametra për Array#push .

                                                   .push(...a)   // push all itmes of array

var array = [{ id: '001', name: 'aaa', type_id: 'a111' }, { id: '002', name: 'bbb', type_id: 'a111' }, { id: '003', name: 'ccc', type_id: 'a222' }, { id: '004', name: 'ddd', type_id: 'a333' }],
    key = 'type_id',
    map = new Map,
    unique = [],
    dupes = [];

array.forEach(o => map.set(o[key], (map.get(o[key]) || []).concat(o)));
map.forEach(a => [unique, dupes][a.length - 1 && 1].push(...a));

console.log(unique);
console.log(dupes);
.as-console-wrapper { max-height: 100% !important; top: 0; }

07.02.2018
  • Përshëndetje! Mund të shtoni disa shpjegime në përgjigjen tuaj? Nuk e kuptoj se çfarë ke bërë këtu: map.forEach(a => [unique, dupes][a.length - 1 && 1].push(...a));. PS: Unë jam relativisht i ri në këtë. Faleminderit paraprakisht :) 15.02.2018
  • Materiale të reja

    Masterclass Coroutines: Kapitulli-3: Anulimi i korutinave dhe trajtimi i përjashtimeve.
    Mirë se vini në udhëzuesin gjithëpërfshirës mbi Kotlin Coroutines! Në këtë seri artikujsh, unë do t'ju çoj në një udhëtim magjepsës, duke filluar nga bazat dhe gradualisht duke u thelluar në..

    Faketojeni derisa ta arrini me të dhënat false
    A e gjeni ndonjëherë veten duke ndërtuar një aplikacion të ri dhe keni nevojë për të dhëna testimi që duken dhe duken më realiste ose një grup i madh të dhënash për performancën e ngarkesës...

    Si të përdorni kërkesën API në Python
    Kërkesë API në GitHub për të marrë depot e përdoruesve duke përdorur Python. Në këtë artikull, unë shpjegoj procesin hap pas hapi për të trajtuar një kërkesë API për të marrë të dhëna nga..

    Një udhëzues hap pas hapi për të zotëruar React
    Në këtë artikull, do të mësoni se si të krijoni aplikacionin React, do të mësoni se si funksionon React dhe konceptet thelbësore që duhet të dini për të ndërtuar aplikacione React. Learning..

    AI dhe Psikologjia — Pjesa 2
    Në pjesën 2 të serisë sonë të AI dhe Psikologji ne diskutojmë se si makineritë mbledhin dhe përpunojnë të dhëna për të mësuar emocione dhe ndjenja të ndryshme në mendjen e njeriut, duke ndihmuar..

    Esencialet e punës ditore të kodit tim VS
    Shtesat e mia të preferuara - Git Graph 💹 Kjo shtesë është vërtet e mahnitshme, e përdor përpara se të filloj të punoj për të kontrolluar dy herë ndryshimet dhe degët më të fundit, mund të..

    Pse Python? Zbulimi i fuqisë së gjithanshme të një gjiganti programues
    Në peizazhin gjithnjë në zhvillim të gjuhëve të programimit, Python është shfaqur si një forcë dominuese. Rritja e tij meteorike nuk është rastësi. Joshja e Python qëndron në thjeshtësinë,..