JS数组声明

时间:2015-05-14 08:57:42

标签: javascript jquery arrays declaration

这是我的第一个问题,经过多年的阅读,所以请跟我好。

我在js / jq中遇到阵列管理问题。

我有几个元素的数组,用$ .each函数处理。 我想将匹配元素提取到另一个数组并返回此数组。 但由于某种原因(不知道是不是因为数组声明,jquery.each函数...)我有第一个空元素。

我认为我让它比理解起来更难理解,所以制作了jsfiddle。

var arr = new Array();
$.each([1,2,3], function(index,element){
    if (element == 2){
        arr[index] = element;
    }
});

arr必须只有1个元素,但arr.length返回2,因为第一个数组插槽为空。

这是一个小提琴http://jsfiddle.net/moay7y95/

我很确定这是一个简单而愚蠢的事情,但我找不到答案。

提前致谢!

6 个答案:

答案 0 :(得分:3)

您正在1 st索引处推送数组中的元素。因此,javascript默认情况下将undefined放在0索引处。

因此,在each结束时,您的数组将是

[undefined, 2];

这就是length为2的原因。

您可以使用push在数组中添加元素:

$.each([1, 2, 3], function (index, element) {
    if (element == 2) {
        arr.push(element);
        elem++;
    }
});

演示:https://jsfiddle.net/tusharj/moay7y95/2/

  

push()方法将一个或多个元素添加到数组的末尾,并返回数组的新长度。

文档:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/push

答案 1 :(得分:3)

最佳解决方案:使用.filter

var arr = [1, 2, 3].filter(function(value){
    return value == 2
});

如果返回值为true,则该元素将包含在返回的数组中,否则将被忽略。这是纯粹的js,所以你不需要jquery。请参阅有关.filter

的文档

您的问题:使用.push

尝试在阵列上使用.push方法(请参阅Mozilla's documentation)。

var arr = new Array();
$.each([1,2,3], function(index,element){
    if (element == 2){
        arr.push(element);
    }
});

.push方法会在添加元素时动态增长数组。

您的问题是函数内index的值是初始数组中的参考点。这意味着如果查看返回的数组,您会发现[undefined, 2],因此长度返回为2.如果条件为element == 3,则会有两个空插槽。

或者:使用.grep

另一种jQuery方法是$.grep。见http://api.jquery.com/jquery.grep/

var arr = $.grep([1, 2, 3], function (value) {
    return value == 2
});

这是jQuery对javascript' .filter的实现。

答案 2 :(得分:2)

您的数组[1, 2, 3]有三个元素和三个相关索引:0,1和2.在$.each()循环遍历该数组的每次迭代中,索引及其值传递给函数

所以第一次调用将0, 1作为参数传递。第二个调用将1, 2作为参数传递,然后if语句条件的计算结果为true,因此您的代码为:

arr[index] = element;

实际上相当于

arr[1] = 2;

由于你在索引1处插入一个元素,你最终会得到一个空索引0。

您只需使用Array.push()将元素添加到数组中:

arr.push(element);

答案 3 :(得分:2)

如前所述,问题是您在索引1处分配值,因此数组将被视为长度为2.

一种解决方案是使用.push()而不是基于索引进行分配。

另一种方法可能是使用Array.filter()并在元素与条件匹配时返回true

var arr = [1, 2, 3].filter(function(value){
    return value == 2
});

演示:Fiddle

使用$.grep()

var arr = $.grep([1, 2, 3], function (value) {
    return value == 2
});

答案 4 :(得分:0)

[1, 2, 3]

if (element == 2)

arr[index] = element;  

这意味着您将arr [1] 设置为元素。

如果你想按顺序将它添加到arr(正常填充),将它添加到艺术中

arr.push(element);

答案 5 :(得分:0)

好像你正在寻找Array.filter (MDN)

var elems = ["car", "bike"];
var arr = [1, 2, 3, "car", 5, "bike"].filter(myFilterFunc);

function myFilterFunc(val) {
    if (elems.indexOf(val) > -1) return true;
}

<强> Fiddle