En subrayado, puedo encontrar correctamente un artículo con un valor clave específico
var tv = [{id:1},{id:2}]
var voteID = 2;
var data = _.find(tv, function(voteItem){ return voteItem.id == voteID; });
//data = { id: 2 }
pero, ¿cómo encuentro en qué índice de matriz ocurrió ese objeto?
javascript
underscore.js
mheavers
fuente
fuente
findIndex
:var dataIndex = _.findIndex(tv, { id: voteID })
Respuestas:
No sé si existe un método de subrayado existente que haga esto, pero puede lograr el mismo resultado con JavaScript simple.
Entonces puedes simplemente hacer:
var data = tv[tv.getIndexBy("id", 2)]
fuente
return -1;
por defecto?findIndex
fue agregado en 1.8:Ver: http://underscorejs.org/#findIndex
Alternativamente, esto también funciona, si no le importa hacer otra lista temporal:
Ver: http://underscorejs.org/#pluck
fuente
index = _.findIndex(tv, {id: voteID})
funcionará, también funciona si latv
colección tiene valores más complicados (más que solo unaid
propiedad)Si desea permanecer con guión bajo para que su función de predicado pueda ser más flexible, aquí hay 2 ideas.
Método 1
Dado que el predicado para
_.find
recibe tanto el valor como el índice de un elemento, puede usar el efecto secundario para recuperar el índice, así:Método 2
Mirando la fuente de subrayado, así es como
_.find
se implementa:Para hacer de esto una
findIndex
función, simplemente reemplace la línearesult = value;
conresult = index;
Esta es la misma idea que el primer método. Lo incluí para señalar que el subrayado también usa efectos secundarios para implementar_.find
.fuente
Lo-Dash , que extiende Underscore, tiene el método findIndex , que puede encontrar el índice de una instancia dada, o por un predicado dado, o según las propiedades de un objeto dado.
En tu caso, yo haría:
Darle una oportunidad.
fuente
Si su entorno de destino es compatible con ES2015 (o tiene un paso de transpilación, por ejemplo, con Babel), puede utilizar el Array.prototype.findIndex () nativo.
Dado tu ejemplo
fuente
puedes usar el
indexOf
método delodash
fuente
Manteniéndolo simple:
O, para los que no odian, la variante CoffeeScript:
fuente
return parseInt(i) for i, x of array when cond(x)
Esto es para ayudar a los
lodash
usuarios. compruebe si su clave está presente haciendo:fuente
La solución más simple es usar lodash:
const _ = require ('lodash');
fuente
Si espera múltiples coincidencias y, por lo tanto, necesita que se devuelva una matriz, intente:
Si el valor de la propiedad es único y necesita el índice de la coincidencia, intente:
fuente
fuente
Tengo un caso similar pero al contrario es encontrar la clave utilizada en función del índice de un objeto dado. Pude encontrar una solución en el subrayado usando
Object.values
para devolver el objeto a una matriz para obtener el índice producido.fuente