javascript – 获取索引不是从0开始的数组中的第一个元素

前端之家收集整理的这篇文章主要介绍了javascript – 获取索引不是从0开始的数组中的第一个元素前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用一个 javascript库,它返回的数组不是从零开始,如从26或1500开始,我想要做的是获取该数组中第一个元素的方法,无论索引号是从0开始还是任何其他数字.

他们是在javascript中执行此操作的方法吗?

解决方法

@H_502_7@ 以下信息通常很有用,但对于OP所列的问题,Nina’s answer是迄今为止更好的解决方案.

这些被称为稀疏数组,它们是您可能想要在数组上使用for-in的少数情况之一.

请记住,数组是JavaScript中的对象,数组条目是由符合certain criteria名称(数组索引)键入的属性.因此,我们可以使用让我们发现对象属性功能来查找稀疏数组上的索引.

for-in示例:

for (var n in theArray) {
    if (theArray.hasOwnProperty(n) && isArrayIndex(n)) {
        // Use theArray[n]
    }
}

This answer显示了如何确定n是数组索引而不是其他属性.一个非常技术性的定义是

function isArrayIndex(n) {
    return /^0$|^[1-9]\d*$/.test(n) &&
           n <= 4294967294;
}

……但对我们大多数人来说,这个定义足够好

function isArrayIndex(n) {
    return !isNaN(parseInt(n,10));
}

同样,您可以使用Object.keys;因为它只查看自己的可枚举属性,所以不需要hasOwnProperty检查:

Object.keys(theArray).forEach(function(n) {
    if (isArrayIndex(n)) {
        // ...
    }
});

请注意,正式情况下,这些都没有任何特定顺序,即使在ES2015(“ES6”)中也是如此.所以从理论上讲,你可以看到数字顺序以外的索引.在现实世界中,我从来没有见过一个甚至模糊的现代JavaScript引擎,它无法按顺序返回数组索引.它们不是必须的,但是我尝试过的每一个都是.

所以正式,你需要获得一个完整的列表,然后找到它的最小值:

var min = Object.keys(theArray).reduce(function(min,n) {
    var i = parseInt(n,10);
    return isNaN(i) || (min !== undefined && min > i) ? min : i;
},undefined);

如果数组为空,那将给你未定义,如果不是,则给出min index.但是如果你想做出假设,你将按数字顺序获得密钥:

// Makes an assumption that may not be true
var min = +Object.keys(theArray).filter(isArrayIndex)[0];

如果您使用的是完全最新的JavaScript引擎,则可以依赖于Object.getOwnPropertyNames返回的顺序,这是按顺序列出数组索引所必需的.

var min = +Object.getOwnPropertyNames(theArray).filter(isArrayIndex)[0];

猜你在找的JavaScript相关文章