从输入字段值创建JS数组

4
我有x个class为'agency_field'的输入框。怎样创建一个JS数组,以包含这个class的所有输入框的值呢?
使用jQuery,此代码会出现语法错误:
``` $(".agency_field").each(function(index) { agencies[] = $(this).val(); }); ```

天啊,你刚刚在一分钟内收到了6个答案。 - McStretch
很难超越SO的响应时间! - stef
LOL 五个 each() 答案,只有一个 map() 答案... - Šime Vidas
顺便说一下,简单的代码通常更容易阅读,而复杂、优化的代码通常对于初学者来说很难阅读。但这并不意味着初学者应该避免它。他们应该尝试理解它,然后它会变得更易读。 - Šime Vidas
@McStretch 是的,天真和简单并不一样。我想说,这两种解决方案在简洁程度上是相等的(基于代码大小)。然而,我也认为each()的解决方案更加天真。 - Šime Vidas
显示剩余17条评论
7个回答

10

你可以使用.map代替,它或许更适合你的目的:


var values = $(".agency_field").map(function() {
    return this.value;
}).get();
alert(values.join(","));

@karim79:以前从没见过这种方法...很有意思。相比于each/push,速度如何?看来是时候阅读一些API了... - James South
@karim 不需要使用 .join(",")。当数组强制转换为字符串时,默认会添加逗号。 - Šime Vidas
@James South - 我无法想象在典型应用程序中会有任何可感知的性能差异。我使用它是因为它被设计成以简洁的方式从集合中提取属性,正如手册所说:““.map()”方法特别适用于获取或设置元素集合的值。” - karim79
@karim:好的,知道了。干杯! - James South
@James 根据这个小测试,map()的解决方案要慢40%。然而,对于10个输入字段的集合,每个each()的时间为0.01毫秒,而map()的时间为0.017毫秒,这是7微秒的差异(在我的机器上)。 - Šime Vidas
显示剩余6条评论

0
var agencies = [];
$(".agency_field").each(function(index) { agencies.push($(this).val()); });

@stef,你不应该选择第一个答案。你应该选择最佳答案——在这种情况下,是卡里姆的,因为它得到了最多的投票。 - McStretch

0
var arr = []; $(".agency_field").each(function(index) { arr.push($(this).val()); });

arr 最终会包含你想要的内容。


0

你的代码需要稍作修改:

var agencies = [];
$(".agency_field").each(function(index) { 
    agencies.push($(this).val()); 
});

0
你需要先创建一个数组,然后将每个值添加到该数组中:
var agencies = [];
$(".agency_field").each(function(index) { agencies.push($(this).val()) });

0

你很熟悉像 PHP 这样的语言吧? ;) 在 JavaScript 中,你可以使用 array.push() 来向数组追加元素;所以

$(".agency_field").each(function(index) { agencies.push( $(this).val() ); });

0
你每次迭代都创建一个新的数组。相反,尝试在每次调用之前实例化一个数组,并在每次迭代中向该数组添加内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接