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.
- Seleccionar un conjunto de algo
- De un conjunto de Algo
- 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.