JavaScript - 获取数组元素的位置

24
例如,一个名为arrayElements的数组类型变量包含[1,2,3,4]。
除了使用循环之外,如何获得数组变量中值为“3”的位置?
谢谢。
5个回答

54

可以考虑使用indexOf,它返回数组中元素的从0开始计数的位置。

例如:

[1,2,3,4].indexOf(3); // produces 2

请注意,此方法在IE 8及以下版本中不可用。


3
如果数组是 [1, 2, 3, 4, 3],你要如何获取两个不同的变量中每个 3 的位置? - CPC
1
你可以使用Array.reduce方法来返回一个包含多个元素位置的数组。以下代码返回一个位置数组[2,4] - 即两个3的位置。var array = [1, 2, 3, 4, 3].reduce(function(array, n, i) { if (n===3) array.push(i); return array; },[] ); - RepeatQuotations

4

或者使用简单的for循环:

function getPosition(elementToFind, arrayElements) {
    var i;
    for (i = 0; i < arrayElements.length; i += 1) {
        if (arrayElements[i] === elementToFind) {
            return i;
        }
    }
    return null; //not found
}

getPosition(3, [1, 2, 3, 4]);

4
jQuery提供了一个“inArray”功能,类似于PHP:
var a = [1,2,3,4];
console.log( jQuery.inArray(3, a) ); //returns 2

如果您在项目中已经使用 jQuery,那么这是一种不错的选择!jQuery 尽可能使用 indexOf(最快的解决方案),否则会使用基于循环的解决方案。


0

这个例子仅演示了可以使用map()返回数组的每个元素。一旦我们有了它,就可以检索数组中元素的索引:

function searchPosition(elementToFind, array) {
    return array.map(function(el) {
        return el;
    }).indexOf(elementToFind);
}

searchPosition(3, [1, 2, 3, 4]); // returns 2

额外福利:

虽然这不是 OP 的问题的一部分,但如果您想要检索数组中满足某些条件的第一个元素的位置,您可以使用 ES6 提供的 findIndex() 函数来实现:

var array = [101, 90, 104, 80];

function findFirstLessNumber(element) {
  return element < 100;
}

console.log(array.findIndex(findFirstLessNumber)); // returns 1 (the position of 90)

1
@jhpratt 我已经完成了,并添加了更多的代码来解释其他事情! - robe007

0

正如一些答案已经指出的那样,新版浏览器中的数组具有像indexOfmapforEach这样的方法,非常方便,可以避免编写大量的for循环。

如果您需要支持没有这些函数的旧环境,我强烈建议使用库(或编写自己的库)来实现这些非常常见的数组操作(就像soc建议的那样)。

var arrayfn = (function(){
    var M = {};

    M.indexOf = function(array, item){ ... };

    M.contains = function(array, item){ return M.indefOf(array, item) !== -1; };

    M.map = function(array, callback){ ... };
}());

arrayfn.contains([1,2,3], 2);

大多数流行的JS框架应该已经内置了这些功能。就我所知,Dojo、jQuery和Underscore等顶级框架已经具备了其中一些函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接