Estoy usando la biblioteca de JS subrayado y en particular el uso de los _.each
y _.sortby
las bibliotecas llamadas. Me pregunto si hay alguna forma posible de obtener el índice del valor dentro del delegado del iterador
_.sortBy([1, 4, 2, 66, 444, 9], function(num){
/*It'd be great to have access to the index in here */
return Math.sin(num);
});
javascript
underscore.js
contactmatt
fuente
fuente
sortBy
partir de la versión 4.17.4, lo que probablemente sea más útil saber en este escenario.Puede obtener el índice de la iteración actual agregando otro parámetro a su iterador
function
, por ejemplofuente
Si prefiere transformar su matriz, entonces el
iterator
parámetro de lamap
función de subrayado también se pasa al índice como segundo argumento. Entonces:... devoluciones:
fuente
El iterador de
_.each
se llama con 3 parámetros(element, index, list)
. Así que sí, para_.each
tu taxi obtén el índice.Puedes hacer lo mismo en sortBy
fuente
Creo que vale la pena mencionar cómo funciona internamente _.each () del subrayado. _.Each (list, iteratee) comprueba si la lista pasada es un objeto de matriz o un objeto.
En el caso de que la lista sea una matriz, los argumentos iterados serán un elemento de lista y un índice como en el siguiente ejemplo:
Por otro lado, si el argumento de la lista es un objeto, el iteratee tomará un elemento de lista y una clave:
Como referencia, este es el código _.each () de Underscore.js 1.8.3
fuente
De manera más general, en la mayoría de las circunstancias, las funciones de subrayado que toman una lista y un argumento como los dos primeros argumentos proporcionan acceso al índice de la lista como el penúltimo argumento del iterador. Esta es una distinción importante cuando se trata de las dos funciones de subrayado, _.reduce y _.reduceRight, que toman 'memo' como su tercer argumento; en el caso de estos dos, el índice no será el segundo argumento, sino el tercero:
Así que si quería que podría obtener el índice mediante subrayado en sí:
_.last(_.initial(arguments))
. Una posible excepción (no lo he intentado) es _.map, ya que puede tomar un objeto en lugar de una lista: "Si la lista es un objeto JavaScript, los argumentos del iterador serán (valor, clave, lista)". - ver: http://underscorejs.org/#mapfuente
Cuando esté disponible, creo que la mayoría de las funciones de matriz lodash mostrarán la iteración. Pero ordenar no es realmente una iteración de la misma manera: cuando estás en el número 66, no estás procesando el cuarto elemento de la matriz hasta que esté terminado. Una función de clasificación personalizada recorrerá una matriz varias veces, empujando los números adyacentes hacia adelante o hacia atrás, hasta que todo esté en su lugar correcto.
fuente