javascript - 为什么 Array.concat 在连接 jQuery 对象的二元素和三元素数组时会生成三元素数组?

标签 javascript jquery html arrays

我有一个带有两个固定输入元素的表单,后跟任意数量的动态创建的元素,这些元素的名称属性值都带有相同的字符串后缀(请参阅代码片段)。我试图获得一组 jQuery 对象,每个输入元素对应一个。

但是,当我连接一个包含表示前两个元素的对象的 2 元素数组和一个包含其余元素的对象的 3 元素数组时,结果只是一个包含第一个数组的数组对象,只有一个额外元素包含第二个数组的对象作为数组,这不是我理解的concat工作方式。

我希望新数组是一个五元素数组,其中包含代表前两个固定输入的 jQuery 对象,然后是其余的。

忽略这是否是解决当前问题的正确方法(很可能不是):我的期望是否错误,有人可以解释为什么 concat 会产生这个结果吗?

var firstTwoFields = [
  $('[name=field1]'),
  $('[name=field2]')
];

var otherFields = $('[name$=test]').map(function() { return $(this); });

var newArray = firstTwoFields.concat(otherFields);

document.write('firstTwoFields.length: ' + firstTwoFields.length + '<br>');
document.write('otherFields.length: ' + otherFields.length + '<br>');
document.write('newArray.length: ' + newArray.length + '<br>');
document.write('newArray[2].length: ' + newArray[2].length + '<br>');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<input name="field1" value="" /><br>
<input name="field2" value="" /><br>
<input name="field3_test" value="" /><br>
<input name="field4_test" value="" /><br>
<input name="field5_test" value="" /><br>
<br>

最佳答案

$().map() 将返回类似于数组的 jQuery 对象并且具有长度,但是不是' t 一个可以使用 Array.prototype 方法的正确数组。

您需要使用get()返回正确的数组,或者使用$.map():

var otherFields = $('[name$=test]').map(function() { return $(this); }).get();

使用$.map():

 var otherFields = $.map( $('[name$=test]'), function(elem) { return $(elem); })

引用:get() docs

关于javascript - 为什么 Array.concat 在连接 jQuery 对象的二元素和三元素数组时会生成三元素数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32783911/

相关文章:

javascript - 基于下拉列表中选择值的条件要求

javascript - 如何用jquery选择最后一个元素?

python - Windows使用请求将一堆空格/换行符添加到用python编写的html文件中

javascript - <img src ="x"onerror ="alert(\"hello\")"/>) 转义引号是非法的?

javascript - 如何在 JavaScript 中控制 SWFObject?

javascript - 有没有办法一次性删除localStorage的全部内容?

javascript - 并排响应图像具有相同的高度不同的宽度

javascript - TouchEvent非法构造函数

javascript - 如何让 jQuery 只选择第一个 closest() 元素?

javascript - 如何设置复选框到达第三个复选框时自动取消选中