繁体   English   中英

获取稀疏JavaScript数组的第一个元素

[英]Get first element of a sparse JavaScript array

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

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

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

如果你不使用顺序编号的元素,你必须循环直到你碰到第一个:

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)。 如果您经常需要遍历一个真正的稀疏数组,请考虑另一种数据结构,例如将对象保持在其旁边,将序数结果反向映射到索引,或者适合您的数据。

filter方法适用于稀疏数组。

var first = array.filter(x => true)[0];

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

你有没有考虑过:

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。

我也遇到了类似的问题,并且很惊讶没有人考虑过以下问题:

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

以上将产生

1245,31
2045,45

如果需要,您可以在第一次迭代后存在,如果所有这些都是必需的,但通常我们需要知道数组的开始位置。

这是一个使用ES5方法和Array#some的提议。

代码获取第一个nonsparse元素和索引。 迭代会立即停止,并在回调中返回true

 var a = [, , 22, 33], value, index; a.some(function (v, i) { value = v; index = i; return true; }); console.log(index, value); 

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

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

但是,在构建阵列时,听起来好像在做一些奇怪的事情。 也许Array.push可以帮到你吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM