2011-10-24 11 views
45

Creo que esta pregunta será bastante fácil para los que jugaron con java script/jquery.Jquery, verificando si existe un valor en el conjunto o no

var arr = new Array(); 

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

Creo que el código anterior explica lo que quiero de una manera muy simple. Me imagino que este $ .map funcionaría así, pero lamentablemente no pude obtener resultados con esto.

¿Cuál es la forma más simple y elegante de hacer esto? ¿Realmente reviso todo el conjunto solo para ver si el valor de una clave está allí o no?

¿Jquery tiene algo así como isset($array['key'])?

EDITAR

He intentado utilizar InArray pero sigue agregando objeto a la matriz incluso si existe una coincidencia.

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

Respuesta

17

Si desea hacerlo utilizando .map() o simplemente quieren saber cómo funciona puede hacerlo como este:

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 función maneja cada elemento por separado. El .inArray() propuesto en otras respuestas es probablemente la forma más eficiente de hacerlo.

+1

Solo 1 información extra; 'added = true' debe estar dentro de la condición. – Revenant

18

jQuery tiene la función inArray:

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

+1

He intentado usar inArray pero parece que estoy haciendo un error en algún momento. Sigue agregando datos. – Revenant

+0

@Revenant, [** Aquí **] (http://stackoverflow.com/a/7881008/75500) es un ejemplo. – Shimmy

206

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

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

Lástima que la votación ascendente en la comunidad no haya podido cinco años después dar como resultado que se marque algo como la respuesta correcta.:) – David

+0

Deben estar marcando las respuestas correctas al mirar los votos al alza después de x cantidad de tiempo – edward

+0

En realidad '$ .inArray' realiza a === en lugar de ==. Entonces si haces '$ .inArray (" 4 ", [1,2,3,4])' obtendrás -1 – Yuri

7

Trate jQuery.inArray()

Aquí es una jsfiddle link utilizando el mismo código: http://jsfiddle.net/yrshaikh/SUKn2/ método

El .inArray $() es similar al método nativo de JavaScript .indexOf() en el que se devuelve -1 cuando se doesn no encuentras una coincidencia Si el primer elemento dentro de la matriz coincide con el valor, $ .inArray() devuelve 0

Ejemplo de código:

<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> 

de salida:

 
"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 

    } 

Referencia: Jquery Array

El método $ .inArray() es similar a El método nativo de .indexOf() en JavaScript devuelve -1 cuando no encuentra una coincidencia. Si el primer elemento dentro de la matriz coincide con el valor, $ .inArray() devuelve 0.

+1

Esto es lo que estoy buscando, muchas gracias por la solución coool – Ravindra

Cuestiones relacionadas