Saltar al contenido

Hacer que Javascript haga comprensión de listas

este problema se puede tratar de diferentes maneras, pero te dejamos la solución más completa para nosotros.

Solución:

caso genérico usando Array.map, requiere javascript 1.6 (es decir, funciona en todos los navegadores pero IE < 9) o con un marco de aumento de objetos como MooTools funciona en todos los navegadores:

var list_of_names = document.getElementsByTagName('input').map(
  function(element)  return element.getAttribute('name'); 
);

Ejemplo específico de jQuery, funciona en todos los navegadores:

var list_of_names = jQuery.map(jQuery('input'), function(element)  return jQuery(element).attr('name'); );

las otras respuestas usando .each estan equivocados; no el código en sí, pero las implementaciones son subóptimas.

Editar: también hay comprensiones de matriz introducidas en Javascript 1.7, pero esto depende puramente de la sintaxis y no se puede emular en navegadores que carecen de ella de forma nativa. Esto es lo más parecido que puede obtener en Javascript al fragmento de Python que publicó. Sin embargo, eso se eliminó del idioma.

Una lista de comprensión tiene algunas partes.

  1. Seleccionar un conjunto de algo
  2. De un conjunto de Algo
  3. Filtrado por algo

En JavaScript, a partir de ES5 (así que creo que es compatible con IE9+, Chrome y FF) puedes usar el map y filter funciones en un array.

Puedes hacer esto con el mapa y el filtro:

var list = [1,2,3,4,5].filter(function(x) return x < 4; )
               .map(function(x)  return 'foo ' + x; );

console.log(list); //["foo 1", "foo 2", "foo 3"]

Eso es lo mejor que se puede obtener sin configurar métodos adicionales o usar otro marco.

En cuanto a la pregunta específica...

Con jQuery:

$('input').map(function(i, x)  return x.name; );

Sin jQuery:

var inputs = [].slice.call(document.getElementsByTagName('input'), 0),
    names = inputs.map(function(x)  return x.name; );

[].slice.call() es solo para convertir el NodeList a una Array.

Aquellos interesados ​​en Javascript "hermoso" probablemente deberían consultar CoffeeScript, un lenguaje que se compila en Javascript. Básicamente existe porque a Javascript le faltan cosas como la comprensión de listas.

En particular, la comprensión de listas de Coffeescript es aún más flexible que la de Python. Consulte la lista de documentos de comprensión aquí.

Por ejemplo, este código daría como resultado un array de name attributes de input elementos.

[$(inp).attr('name') for inp in $('input')]

Sin embargo, una desventaja potencial es que el Javascript resultante es detallado (y en mi humilde opinión confuso):

var inp;
[
  (function() 
    var _i, _len, _ref, _results;
    _ref = $('input');
    _results = [];
    for (_i = 0, _len = _ref.length; _i < _len; _i++) 
      inp = _ref[_i];
      _results.push($(inp).attr('name'));
    
    return _results;
  )()
];

Reseñas y valoraciones

Si piensas que te ha resultado de utilidad nuestro post, sería de mucha ayuda si lo compartieras con el resto seniors y nos ayudes a extender este contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *