Tengo una matriz de objetos. Cada objeto tiene, entre otros, un atributo de ID. Quiero encontrar el índice en la matriz del objeto con una ID específica. ¿Hay alguna manera elegante y simple de hacer esto en jQuery?jQuery: índice del elemento en la matriz donde el predicado
Respuesta
En este caso, debe usar el bucle for
en javascript en lugar de usar jQuery. Ver 3 en forma http://net.tutsplus.com/tutorials/javascript-ajax/10-ways-to-instantly-increase-your-jquery-performance/
Actualizado: jQuery está escrito en javascript y no puede ser más rápido que otro código escrito también en javascript. jQuery es muy bueno si trabajas con el DOM, pero realmente no ayuda si trabajas con matrices u objetos javascript simples.
El código que está buscando puede ser algo como esto:
for (var i=0, l = ar.length; i<l; i++) {
if (ar[i].ID === specificID) {
// i is the index. You can use it here directly or make a break
// and use i after the loop (variables in javascript declared
// in a block can be used anywhere in the same function)
break;
}
}
if (i<l) {
// i is the index
}
importante que se debe mantener algunas reglas simples javascript: Siempre declarar variables locales (no se olvide var
antes de la declaración de variables) y caché cualquier propiedad o índice que use más de una vez en una variable local (como ar.length
arriba). (Véase, por ejemplo http://wiki.forum.nokia.com/index.php/JavaScript_Performance_Best_Practices)
En realidad, no elegante, pero un truco lindo:
var index = parseInt(
$.map(array, function(i, o) { return o.id === target ? i : ''; }).join('')
);
jQuery no tiene una gran cantidad de construcciones funcionales como esa; la filosofía de la biblioteca está realmente centrada en el trabajo de las disputas de DOM. Ni siquiera agregarán una función .reduce()
porque nadie puede pensar en una razón por la que sería útil para la funcionalidad principal.
La biblioteca Underscore.js tiene muchas de esas instalaciones, y "funciona bien" con jQuery.
See [`Array.filter`][1] to filter an array with a callback function. Each object in the array will be passed to the callback function one by one. The callback function must return `true` if the value is to be included, or false if not. var matchingIDs = objects.filter(function(o) { return o.ID == searchTerm; }); All objects having the ID as searchTerm will be returned as an array to matchingIDs. Get the matching element from the first index (assuming ID is unique and there's only gonna be one) matchingIDs[0]; [1]: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/filter
Actualización:
Pedido findIndex
de ECMAScript 6.
items.findIndex(function(item) { item.property == valueToSearch; });
Desde findIndex
aún no está disponible en la mayoría de los navegadores, se puede rellenar usando este implementation:
if (!Array.prototype.findIndex) {
Array.prototype.findIndex = function(predicate) {
if (this == null) {
throw new TypeError('Array.prototype.findIndex called on null or undefined');
}
if (typeof predicate !== 'function') {
throw new TypeError('predicate must be a function');
}
var list = Object(this);
var length = list.length >>> 0;
var thisArg = arguments[1];
var value;
for (var i = 0; i < length; i++) {
value = list[i];
if (predicate.call(thisArg, value, i, list)) {
return i;
}
}
return -1;
};
}
Use jOrder. http://github.com/danstocker/jorder
Introduzca su matriz en una tabla jOrder y agregue un índice en el campo 'ID'.
var table = jOrder(data)
.index('id', ['ID']);
A continuación, obtener el índice de matriz de un elemento por:
var arrayidx = table.index('id').lookup([{ ID: MyID }]);
Si desea toda la fila, entonces:
var filtered = table.where([{ ID: MyID }]);
Voila.
No hay métodos incorporados para esto; el método [].indexOf()
no toma un predicado, por lo que necesita algo de encargo:
function indexOf(array, predicate)
{
for (var i = 0, n = array.length; i != n; ++i) {
if (predicate(array[i])) {
return i;
}
}
return -1;
}
var index = indexOf(arr, function(item) {
return item.ID == 'foo';
});
La función devuelve -1 si el predicado nunca cede un valor Truthy.
- 1. índice del elemento en una matriz multidimensional
- 2. ¿Cómo obtener el índice del elemento desde el predicado pasado a algún algoritmo STL?
- 3. recibiendo el índice del elemento seleccionado en jQuery autocompletado
- 4. índice de jQuery del elemento en el selector
- 5. Ruby: ¿Cómo encontrar el índice del elemento de matriz mínimo?
- 6. ¿Cómo se calcula el índice del elemento en una lista?
- 7. Jquery quitar el elemento de la matriz
- 8. obtener el índice de jQuery elemento "td"
- 9. XSLT - Coincidir elemento variable en el predicado
- 10. ¿Cómo obtengo el índice de un elemento en una matriz?
- 11. Encuentra el elemento con la distancia más larga en una matriz determinada donde cada elemento aparece dos veces?
- 12. ¿Cómo obtener el índice de un elemento en una matriz?
- 13. Cómo obtener el índice de un elemento en una matriz
- 14. ¿Cómo obtener el índice del elemento al mapear una matriz en Scala?
- 15. Obtener elemento índice en la lista con jQuery
- 16. Obtener elemento del índice arbitrario en el conjunto
- 17. Obtener elemento del selector dado un índice con jQuery
- 18. Cómo obtener el índice de un elemento primario en jQuery
- 19. Obtener el índice del objeto en la matriz para buscar el objeto correspondiente en otra matriz
- 20. ¿Obtiene el índice del elemento actual en el bucle Powershell?
- 21. posición del elemento en la matriz
- 22. C# programa donde el tamaño del índice de matriz y los elementos son de la entrada del usuario y luego buscar un elemento específico
- 23. ¿Encontrar el índice del último elemento distinto de cero en cada fila de una matriz dada?
- 24. PHP - Obtener el índice de un elemento de una matriz
- 25. Obtener el índice del elemento de una matriz por el valor
- 26. jQuery mueve el elemento DOM dentro del elemento primario
- 27. elemento de la plantilla se unen al índice de la matriz en KnockoutJS
- 28. R - posición de retorno del elemento en la matriz?
- 29. javascript - cómo obtener el nombre del objeto o el nombre del índice de la matriz asociativa?
- 30. Encontrar elemento mínimo en matriz, y su índice de
Exactamente lo que también estoy buscando. Lástima que no hay una solución elegante, de hecho ... – epeleg