2011-10-24 24 views
45

Credo che questa domanda sarà abbastanza facile per quelli che hanno giocato con java script/jquery.Jquery, controlla se esiste un valore nell'array o meno

var arr = new Array(); 

$.map(arr, function() { 
if (this.id == productID) { 
    this.price = productPrice; 
}else { 
    arr.push({id: productID, price: productPrice}) 
} 
} 

Immagino che il codice sopra spieghi ciò che voglio in modo molto semplice. Immagino che questo $ .map funzioni come questo, ma sfortunatamente non sono riuscito a ottenere risultati con questo.

Qual è il modo più semplice ed elegante per farlo? Vado veramente attraverso tutti gli array solo per scoprire se il valore di una chiave è lì o no?

Jquery ha qualcosa come isset($array['key'])?

EDIT

ho cercato di utilizzare inArray ma continua ad aggiungere oggetto matrice, anche se v'è una corrispondenza.

if ($.inArray(productID, arr) > -1) { 
    var number = $.inArray(productID, arr); 
    orderInfo[number].price = parseFloat(productPrice); 
}else { 
    orderInfo.push({id:productID, price:parseFloat(productPrice)}); 
} 

risposta

17

Se si vuole farlo utilizzando .map() o semplicemente vogliono sapere come funziona si può fare così:

var added=false; 
$.map(arr, function(elementOfArray, indexInArray) { 
if (elementOfArray.id == productID) { 
    elementOfArray.price = productPrice; 
    added = true; 
} 
} 
if (!added) { 
    arr.push({id: productID, price: productPrice}) 
} 

La funzione gestisce ciascun elemento separatamente. Il .inArray() proposto in altre risposte è probabilmente il modo più efficiente per farlo.

+1

Solo 1 informazione extra; 'added = true' deve essere all'interno della condizione. – Revenant

18

jQuery ha la funzione inArray:

http://api.jquery.com/jQuery.inArray/

+1

Ho provato a utilizzare inArray ma a un certo punto sembra che stia sbagliando. Continua ad aggiungere dati. – Revenant

+0

@Revenant, [** Here **] (http://stackoverflow.com/a/7881008/75500) è un esempio. – Shimmy

206

http://api.jquery.com/jQuery.inArray/

if ($.inArray('example', myArray) != -1) 
{ 
    // found it 
} 
+3

Un brutto voto di votazione da parte della comunità non può portare a cinque anni dopo che qualcosa viene contrassegnato come la risposta giusta.:) – David

+0

Dovrebbero essere contrassegnati le risposte corrette da soli guardando i voti dopo x periodo di tempo – edward

+0

In realtà '$ .inArray' esegue un === invece di ==. Quindi se fai '$ .inArray (" 4 ", [1,2,3,4])' riceverai -1 – Yuri

7

Prova jQuery.inArray()

Ecco un jsfiddle link utilizzando lo stesso codice: http://jsfiddle.net/yrshaikh/SUKn2/ metodo

Il $ .inArray() è simile al metodo nativo di JavaScript .indexOf() in quanto restituisce -1 quando doesn trovare una corrispondenza Se il primo elemento all'interno dell'array corrisponde valore, $ .inArray() restituisce 0

Esempio Codice:

<html> 
    <head> 
     <style> 
     div { color:blue; } 
     span { color:red; } 
    </style> 
     <script src="http://code.jquery.com/jquery-latest.js"></script> 
    </head> 
    <body>  
     <div>"John" found at <span></span></div> 
     <div>4 found at <span></span></div> 
     <div>"Karl" not found, so <span></span></div> 
     <div> 
     "Pete" is in the array, but not at or after index 2, so <span></span> 
     </div> 
     <script> 
     var arr = [ 4, "Pete", 8, "John" ]; 
     var $spans = $("span"); 
     $spans.eq(0).text(jQuery.inArray("John", arr)); 
     $spans.eq(1).text(jQuery.inArray(4, arr)); 
     $spans.eq(2).text(jQuery.inArray("Karl", arr)); 
     $spans.eq(3).text(jQuery.inArray("Pete", arr, 2)); 
     </script> 
    </body> 
</html> 

uscita:

 
"John" found at 3 
4 found at 0 
"Karl" not found, so -1 
"Pete" is in the array, but not at or after index 2, so -1 
15
if ($.inArray('yourElement', yourArray) > -1) 
    { 
     //yourElement in yourArray 
     //code here 

    } 

Riferimento: Jquery Array

Il metodo $ .inArray() è simile a Il metodo nativo .indexOf() di JavaScript in quanto restituisce -1 quando non trova una corrispondenza. Se il primo elemento all'interno dell'array corrisponde al valore, $ .inArray() restituisce 0.

+1

Questo è quello che sto cercando, grazie mille per la soluzione coool – Ravindra