2013-01-08 8 views
21

Ho questoCon Underscorejs, come scoprire se un array contiene un altro array?

var matches = bookmarks.filter(function(x) { 
    return _.contains(x.get("tags"), 'apple'); 
}); 

che restituirà gli oggetti di segnalibro che hanno i tag mela

Voglio mettere una matrice lì invece di tirare e di tutti i segnalibri che hanno i valori corrispondenti, simile a questo

var matches = bookmarks.filter(function(x) { 
    return _.contains(x.get("tags"), ['apple','orange']); 
}); 

Questo non funziona, in alcun modo per farlo funzionare?

EDIT: mi dispiace, i segnalibri è una raccolta e im cercando di restituire i modelli che hanno la mela e tag arancio

+0

Non correlato ... perché stai mescolando i metodi di elaborazione degli underscore e degli array nativi? 'Array.filter' e' _.taintains'. Non dovresti usare '_.filter'? –

+0

@JosephSilber Ahh, non sapevo di '_()', in realtà non ho usato underscore anche se –

+0

Titolo non ha senso per me – glyph

risposta

25

Se tag è una stringa, il codice sarebbe

return _.indexOf(x.get("tags"), ['apple','orange']) > -1; 

Esempio con indexOf: jsFiddle

Se tag è un array, è possibile utilizzare intersezione

return _.intersection(['apple','orange'], x.get("tags")).length > 0; 

Esempio con incrocio: jsFiddle

+0

Ciao per favore dai un'occhiata alla modifica, ho dimenticato alcuni dettagli. Scusate. –

+0

Quindi i "tag" sono una matrice? – epascarello

+0

Sì, i tag sono una matrice e sto cercando di restituire gli oggetti che hanno i valori di quell'array. –

5

non sembra essere una funzione per quella in sottolineatura. Tuttavia, puoi facilmente combinare altre funzioni per ottenere questo risultato:

_.mixin({ 
    containsAny: function(arr, values) { 
    // at least one (.some) of the values should be in the array (.contains) 
    return _.some(values, function(value) { 
     return _.contains(arr, value); 
    }); 
    } 
}); 
+0

Ciao per favore guarda la modifica, ho dimenticato alcuni dettagli. Scusate. –

Problemi correlati