6

我在javascript中有一个对象数组。我使用jQuery。

如何获取数组中的第一个元素?我不能使用数组索引 - 因为我在将对象添加到数组时分配了每个元素索引。所以索引不是 0、1、2 等。

只需要获取数组的第一个元素?

4

7 回答 7

4

如果您不使用按顺序编号的元素,则必须循环遍历直到遇到第一个:

var firstIndex = 0;
while (firstIndex < myarray.length && myarray[firstIndex] === undefined) {
    firstIndex++;
}
if (firstIndex < myarray.length) {
    var firstElement = myarray[firstIndex];
} else {
    // no elements.
}

或一些相当愚蠢的结构。这将为您提供第一个项目的索引,您可能会或可能不会关心它。

如果这是您需要经常做的事情,您应该保留对当前第一个有效索引的后备引用,因此这每次都变成 O(1) 操作而不是 O(n)。如果您经常需要遍历一个真正稀疏的数组,请考虑另一种数据结构,例如在其旁边保留一个对象,将序数结果反向映射到索引,或者适合您的数据的东西。

于 2010-08-25T23:05:36.347 回答
4

filter方法适用于稀疏数组。

var first = array.filter(x => true)[0];
于 2010-08-25T23:06:22.537 回答
3

你有没有考虑过:

function getFirstIndex(array){
    var result;
    if(array instanceof Array){
        for(var i in array){
            result = i;
            break;
        }
    } else {
        return null;
    }
    return result;
}

?

作为获取数组中最后一个元素的一种方式:

function getLastIndex(array){
    var result;
    if(array instanceof Array){
            result = array.push("");
            array.pop;
        }
    } else {
        return null;
    }
    return result;
}

这些都不使用jquery。

于 2011-05-04T19:58:25.653 回答
2

Object.keys(array)[0]String返回稀疏数组中第一个元素的索引(形式)。

var array = [];
array[2] = true;
array[5] = undefined;

var keys = Object.keys(array);            // => ["2", "5"]
var first = Number(keys[0]);              // => 2
var last = Number(keys[keys.length - 1]); // => 5
于 2016-03-22T04:18:03.077 回答
1

我也面临着类似的问题,很惊讶没有人考虑过以下问题:

 var testArray = [];
 testArray [1245]= 31;
 testArray[2045] = 45;
 for(index in testArray){
    console.log(index+','+testArray[index])
 }

以上会产生

1245,31
2045,45

如果需要,您可以在第一次迭代后存在,但通常我们需要知道数组中从哪里开始。

于 2016-11-21T04:24:21.780 回答
1

这是一个带有 ES5 方法的提案Array#some

代码获取第一个非稀疏元素和索引。迭代立即停止并true在回调中返回:

var a = [, , 22, 33],
    value,
    index;

a.some(function (v, i) {
    value = v;
    index = i;
    return true;
});

console.log(index, value);

于 2016-12-01T18:26:45.540 回答
0

如果您发现自己需要大量操作数组,您可能会对Underscore库感兴趣。它提供了操作数组的实用方法,例如compact

var yourArray = [];
yourArray[10] = "foo";
var firstValue = _.compact(yourArray)[0];

但是,在构建数组时,听起来确实像是在做一些奇怪的事情。也许Array.push会帮助你?

于 2010-08-25T23:11:31.637 回答