Javascript JS数组声明中的空元素
这是我在这里的第一个问题,我已经读了很多年了,所以请对我好一点 我在js/jq中的阵列管理方面遇到了问题 我有一个包含多个元素的数组,每个元素用$处理。 我想将匹配元素提取到另一个数组并返回此数组。 但出于某种原因(不知道是否是因为数组声明,jquery.each函数…),我有了第一个空元素 我想我让这比它更难理解,所以我做了JSFIDLEJavascript JS数组声明中的空元素,javascript,jquery,arrays,declaration,Javascript,Jquery,Arrays,Declaration,这是我在这里的第一个问题,我已经读了很多年了,所以请对我好一点 我在js/jq中的阵列管理方面遇到了问题 我有一个包含多个元素的数组,每个元素用$处理。 我想将匹配元素提取到另一个数组并返回此数组。 但出于某种原因(不知道是否是因为数组声明,jquery.each函数…),我有了第一个空元素 我想我让这比它更难理解,所以我做了JSFIDLE var arr = new Array(); $.each([1,2,3], function(index,element){ if (elemen
var arr = new Array();
$.each([1,2,3], function(index,element){
if (element == 2){
arr[index] = element;
}
});
arr必须只有1个元素,但arr.length返回2,因为第一个数组插槽为空
这是一把小提琴
我确信这是一件简单而愚蠢的事情,但我一直没能找到答案
提前谢谢 您正在将数组中的一个元素推送到
1
st索引处。因此,javascript默认将undefined
放在0
th索引中
因此,在每个的末尾,您的数组将
[undefined, 2];
这就是将长度
设置为2的原因
您可以使用push
在数组中添加元素:
$.each([1, 2, 3], function (index, element) {
if (element == 2) {
arr.push(element);
elem++;
}
});
演示:
方法将一个或多个元素添加到数组的末尾,并返回数组的新长度
文档:最佳解决方案:使用
.filter
var arr = [1, 2, 3].filter(function(value){
return value == 2
});
如果返回值为true,则返回的数组中包含该元素,否则将忽略该元素。这是纯js,因此不需要jquery。请参阅有关的文档
您的问题:使用.push
var arr = [1, 2, 3].filter(function(value){
return value == 2
});
尝试在阵列上使用.push
方法(请参阅)
.push
方法将随着元素的添加动态增加数组
您的问题是,函数中的index
值是初始数组中的一个参考点。这意味着,如果查看返回的数组,您将发现[undefined,2]
,因此长度返回为2。如果您的条件是element==3
,您将有两个空插槽
或者:使用.grep
var arr = [1, 2, 3].filter(function(value){
return value == 2
});
另一个jQuery方法是$.grep
。看
这是jQuery对javascript的.filter
的实现
[1, 2, 3]
if (element == 2)
arr[index] = element;
这意味着您正在将arr[1]设置为元素
如果要按顺序将其添加到arr(正常填充),请将其推入art
arr.push(元素)
您的数组[1,2,3]
有三个元素和三个关联索引:0,1和2。在$的每次迭代中。each()
在该数组上循环,索引及其值将传递给函数
因此,第一个调用将0,1
作为其参数传递。第二个调用将1,2
作为其参数传递,然后if
语句条件的计算结果为true,因此您的代码:
arr[index] = element;
实际上相当于
arr[1] = 2;
由于要在索引1处插入一个元素,因此最终将得到一个空索引0
您只需使用将元素添加到数组中:
arr.push(element);
如前所述,问题是在索引1处赋值,因此数组的长度将被视为2 一种解决方案是使用.push()而不是基于索引进行赋值 另一种方法是,如果元素与条件匹配,则使用并返回true
var arr = [1, 2, 3].filter(function(value){
return value == 2
});
演示:
使用
好像你在找
非常感谢。我知道stackoverflow工作得很好,但不是很好!我对数组和json对象(我正在使用)感到困惑,没有想到数组索引从0开始。现在一切都清楚了。我一直在考虑使用数组是否是最好的方法。最后,我将使用对象,像arr={}一样声明arr。对于对象,我可以毫无问题地拥有像[1,4,5,6]这样的索引。谢谢你的回答!
var arr = [1, 2, 3].filter(function(value){
return value == 2
});
var elems = ["car", "bike"];
var arr = [1, 2, 3, "car", 5, "bike"].filter(myFilterFunc);
function myFilterFunc(val) {
if (elems.indexOf(val) > -1) return true;
}