2009-05-20 14 views
10

ho bisogno di una funzione javascript che può assumere in una stringa e un array, e restituire vero se la stringa è nella matrice ..funzione javascript inArray

function inArray(str, arr){ 
    ... 
} 

avvertimento: non è possibile utilizzare qualsiasi framework JavaScript .

risposta

7

è possibile utilizzare arr.indexOf()

http://www.w3schools.com/jsref/jsref_indexof_array.asp

+0

Interessante. Questa risposta (.indexOf (.)) Sembra funzionare per il mio scopo. Come principiante sono curioso di sapere perché un metodo nella lingua sarebbe stato meno preferito a una funzione personalizzata. – prototype

+0

Mi rendo conto che quanto sopra è vecchio ma vale la pena rispondere per i futuri lettori. array.indexOf() è Javascript 1.6. Le versioni precedenti di Javascript, come quelle che si trovano in Internet Explorer, non la supportano quindi utilizzeremmo un metodo personalizzato/polyfill dove necessario. – n0wak

+0

MDN ha un polyfill che è possibile tagliare e incollare in: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf –

18

Si potrebbe solo fare una funzione di matrice prototipo di ala:

Array.prototype.hasValue = function(value) { 
    var i; 
    for (i=0; i<this.length; i++) { if (this[i] === value) return true; } 
    return false; 
} 

if (['test'].hasValue('test')) alert('Yay!'); 

Nota l'uso di '===' invece di '==' si potrebbe cambiare che se avete bisogno di corrispondenza meno specifici ... In caso contrario, [3] .hasValue ('3') restituirà false.

+3

Compreso var in per (...) è logicamente fuorviante , come suggerisce l'ambito della var è solo all'interno del ciclo for (ai programmatori multilingue). Tuttavia, l'ambito è l'intera funzione. Inoltre, dichiarare le variabili nel punto più alto del loro ambito è solitamente considerato una buona pratica e un ottimo modo per evitare conflitti di scope. – Kato

1

Dai uno sguardo allo this related question. Ecco il codice dalla risposta più votata.

function contains(a, obj) { 
    var i = a.length; 
    while (i--) { 
    if (a[i] === obj) { 
     return true; 
    } 
    } 
    return false; 
} 
8

Qualcosa di simile?

function in_array(needle, haystack) 
{ 
    for(var key in haystack) 
    { 
     if(needle === haystack[key]) 
     { 
      return true; 
     } 
    } 

    return false; 
} 
+5

Probabilmente non avrei dovuto usarlo per (key in array). Se qualcuno ha esteso l'oggetto Array, eseguirà iterazioni anche sui nuovi metodi/proprietà (non solo sui valori dell'array). – Matthew

+0

-1 Meglio usare Array.prototype.indexOf(), fallback con una libreria come underscore, jQurey ecc., E infine se nessuna libreria è ricercata o disponibile allora usare la soluzione precedente eccetto controllare Object.prototype.hasOwnProperty(). – martin

-1

attenzione:

indexOf() utilizza dati parziali. se si dispone di '12', '1'

indexOf ('1') si arriva l'indice di '12' non '1'

+0

Penso che tu abbia torto Non posso down-vote ma potresti per favore supportare la tua risposta? my jsfiddle [here] (http://jsfiddle.net/DDWr6/) dimostra che hai torto – Andreas

+0

Penso che hai confuso gli indici, l'esempio sopra ti darebbe un indice di uno che è l'indice giusto per '1'. Ricorda sempre che il primo elemento dell'array ha un indice pari a zero che è l'indice di "12" Dai un'occhiata alla replica esatta del tuo esempio [qui] (http://jsfiddle.net/DDWr6/) – Andreas