Ho due matrici:CoffeeScript: elemento Array partite altro array
array1 = ["hello","two","three"]
array2 = ["hello"]
voglio verificare se array2 contiene 1 o più parole array1.
Come posso farlo utilizzando Coffeescript?
Ho due matrici:CoffeeScript: elemento Array partite altro array
array1 = ["hello","two","three"]
array2 = ["hello"]
voglio verificare se array2 contiene 1 o più parole array1.
Come posso farlo utilizzando Coffeescript?
Trovato un modo per verificare l'intersezione tra due array utilizzando questo CoffeeScript chapter. CoffeeScript sembra davvero impressionante guardando questo.
Se la matrice risultante dopo l'intersezione degli elementi contiene almeno un elemento, entrambi gli array hanno elementi comuni.
intersection = (a, b) ->
[a, b] = [b, a] if a.length > b.length
value for value in a when value in b
x = ["hello", "two", "three"]
y = ["hello"]
intersection x, y // ["hello"]
Provalo here.
Ho fatto una funzione is_in, guarda il mio esempio:
array1 = ["hello","two","three"]
array2 = ["hello"]
is_in = (array1, array2) ->
for i in array2
for j in array1
if i is j then return true
console.log is_in(array1, array2)
Dopo aver dato un'occhiata l'esempio di intersezione, posso raggiungere questo obiettivo in un altro modo:
intersection = (a, b) ->
[a, b] = [b, a] if a.length > b.length
return true for value in a when value in b
array1 = ["hello","two","three"]
array2 = ["hello"]
console.log intersection(array1, array2)
Il primo è molto più facile da capire - Sarei curioso se qualcuno volesse creare un test jsPerf.com per vedere se c'è qualche vantaggio nel codice di intersezione che hai postato per secondo. – GregL
È possibile creare personalmente un test jsPerf. Fai clic sui due link "Prova qui" e poi prendi il codice JavaScript compilato da lì. Dopodiché crea un jsPerf con i 2 casi. – alessioalex
Si potrebbe provare:
(true for value in array1 when value in array2).length > 0
contains = (item for item in array2 when item in array1)
(invertire le matrici per mostrare doppie registrazioni in array1
)
pensato che avrei buttare il mio CoffeeScript one-liner follia :-P
true in (val in array1 for val in array2)
in caso qualcuno viene qui e sta cercando la differenza rispetto all'intersezione
difference = (val for val in array1 when val not in array2)
questo vi darà un array (differenza) di tutti i valori in array1 ma non in array2
Hmmm, sono abbastanza confuso dalla prima linea, ed uno dei vantaggi principali di CoffeeScript ero dovrebbe essere maggiore chiarezza e leggibilità di JS, giusto? Forse questo è un caso di un codice che è intelligente ma complicato e dovrebbe essere usato solo se effettivamente più efficiente del codice più chiaro fornito da @alessioalex. – GregL
@GregL - intendi questa riga - 'intersezione = (a, b) ->'? – Anurag
Mi spiace, no, intendevo la linea n. 2, che è la prima riga della funzione di intersezione. Ho imparato abbastanza sintassi CS finora per essere in grado di leggere la prima riga. :-) È più che non capisco come quella linea "funzioni". – GregL