Sto cercando di capire una soluzione per la simmetrica differenza utilizzando JavaScript che compie i seguenti obiettivi:Cercando di risolvere differenza simmetrica utilizzando Javascript
- accetta un numero imprecisato di array come argomenti
- conserva la L'ordine originale dei numeri negli array
- non rimuove i duplicati dei numeri nei singoli array
- rimuove i duplicati che si verificano tra gli array
Così, ad esempio, se l'ingresso è ([1, 1, 2, 6], [2, 3, 5], [2, 3, 4]), la soluzione sarebbe, [1, 1, 6, 5, 4].
Sto cercando di risolvere questo come una sfida data da una comunità di codifica online . Le istruzioni esatta dello Stato sfida ,
creare una funzione che prende due o più array e restituisce un array della differenza simmetrica degli array forniti.
Il termine matematico differenza simmetrica si riferisce agli elementi in due set che si trovano nel primo o nel secondo set, ma non in entrambi.
Anche se la mia soluzione qui di seguito trova i numeri che sono unico per ogni array, elimina tutti i numeri che si verificano più di una volta e non impedisce l'ordine dei numeri.
La mia domanda è molto simile a quella richiesta a finding symmetric difference/unique elements in multiple arrays in javascript. Tuttavia, la soluzione non conserva l'ordine originale dei numeri e non conserva i duplicati di numeri univoci che si verificano in matrici singole.
function sym(args){
var arr = [];
var result = [];
var units;
var index = {};
for(var i in arguments){
units = arguments[i];
for(var j = 0; j < units.length; j++){
arr.push(units[j]);
}
}
arr.forEach(function(a){
if(!index[a]){
index[a] = 0;
}
index[a]++;
});
for(var l in index){
if(index[l] === 1){
result.push(+l);
}
}
return result;
}
symsym([1, 1, 2, 6], [2, 3, 5], [2, 3, 4]); // => Desired answer: [1, 1, 6. 5. 4]
Grazie! Questo mi ha lasciato perplesso. Non potrei, per la vita di me, capire come fare l'iterazione e il confronto di elementi che la tua soluzione mostra in modo così chiaro. Grazie molto! – davisec52
@ davisec52 - Ho appena notato che anche l'altra soluzione alla quale ti sei collegato era mia. Immagino che mi piacciano questi tipi di problemi. – jfriend00
Ho aggiunto una versione del codice che funziona in IE (torna a IE9). Nella saggezza infinita di IE (anche IE11), anche se supporta l'oggetto 'Set', non supporta il passaggio di una matrice al costruttore. Quindi, la seconda versione del codice sopra test per la mancanza dell'oggetto 'Set' o IE mal funzionante e utilizza una sostituzione teeny polyfill che fa proprio ciò di cui ha bisogno questa funzione. – jfriend00