Come posso realizzare un cotrollo su due array, il quale restituisce un array (opure modifica il primo) che è il risultato del primo array escluso gli elementi del secondo array.
Come posso realizzare un cotrollo su due array, il quale restituisce un array (opure modifica il primo) che è il risultato del primo array escluso gli elementi del secondo array.
Potresti provare in questo modo:
in cui arr1 ed arr2 sono gli array che vuoi confrontare ed arr3 è l'arrey finale contenete solo i valori di arr1 che non comaiono in arr2.arr3=newArray(arr1.length);
for (var i=0; i<=arr1.length; i++) {
arr3[i]=arr1[i];
}
for (var i=0; i<=arr1.length; i++) {
var elem1=arr1[i];
for (var d=0; d<=arr2.length; d++) {
var elem2=arr2[d];
if (elem1==elem2) {
arr3.splice(elem1);
}
}
}
Due precisazioni: innanzi tutto non sono sicuro che il tutto funzioni (non l'ho neppure testato) e anche se funzionasse non devi avere due elementi uguali in uno stesso array.
Spero di esserti stato utile
Secan
Grazie 1000 per l'interessamente, ma non funziona!
Cioè non da errori, anche se spara fuori in coda all'Array3 un 'undefinided', ma non elimina dall'Array1 i valori contenuti nell'Array2.
![]()
Infatti l'array1 non dovrebbe essere modificato (se si togliessero degli elementi da esso, la sua lunghezza continuerebbe a variare e il secondo ciclo di for non potrebbe funzionare). La funzione dovrebbe IN TEORIA lasciare invariati i tuoi array di partenza e crearne un terzo (arr3) che è uguale al primo meno il secondo. Detto questo, ecco i miei dubbi:
1) per i primi due cicli di for ho utilizzato due varabili "contatori" con lo stesso nome: prova a cambiare una delle due
2) non sono sicuro della sintassi per il metodo splice(), ma non sono riuscito a trovare della documentazione per verificarla
3) a naso, potrei pensare che l'undefined che ritrovi in coda all'array3 possa dipendere dal fatto che gli array 1 e 2 non abbiano lo stesso numero di elementi
Fammi sapere se posso esserti utile in altro modo o se riesci a trovare la soluzione (nel frattempo ci penserò un po' su)
Secan
Scusa, mi sono espresso male, lo so che non elimina elementi dall'array1, ma se ne realizza uno nuovo, ho scritto velox.
Per SLICE: ho trovato questa documentazione:
cars = ["Mercedes", "Ford", "Chrysler", "Honda", "Volvo"]
document.write(cars.splice(1,2))
secondo me il problema non dovrebbe essereci, ma dovrebbe girare bene.
Una cosa, visto che a priori gli diciamo che la dimensione dell'arr3 è praticamente identico a quello di arr1, ma dovrebbe essere quello di arr1 - arr2!
Per il problema udefined ho provato è ho visto che veniva aggiungo un elemento, quindi ho modificato:
for (var i=0; i<=comitati.length; i++) {
in
for (var i=0; i<=comitati.length-1; i++) {
ed infatti quello in più non compare!
Si, inizialmente gli diciamo che la sua dimensione è uguale a quella dell'array1 perchè in principio arr3 è la copia esatta di arr1. In seguito eliminiamo da arr3 tutti gli elementi presenti in arr2.
Il motivo di questa scelta è il seguente: lo script prende il primo elemento di arr1 e lo confronta con tutti quelli di arr2 e, se trova una corrispondenza, cancella l'elemento da arr3.
Se provassiomo a fare il contrario (ossia a confrotare tutti gli elementi ed inserire quelli diversi) potrebbe succedere una cosa simile:
arr1 {a,b,c}
arr2 {a,d,e}
arr3 {a,a,b,b,b,c,c,c}
Secan
Aspetta, mi sono un attimo perso: se non vengono segnalati errori, l'arr3 viene correttamente popolato ed hai eliminato il problema dell'undefined in coda, cos'è che non funziona? Cosa contiene alla fine arr3?
Secan
praticamente arr3 è la copia di arr1, secondo me il problema e nell'assegnazione dell'elemento da eliminare, non per valore, ma per numero di elemento