如何找到具有特定值的数组索引?

243

假设我有这个:

imageList = [100,200,300,400,500];

这给了我

[0]100 [1]200 等等。

在JavaScript中是否有一种方法可以返回带有值的索引?

也就是说,我想要 200 的索引,我将得到 1


6
这里有一个很棒的答案 -> https://dev59.com/E3VC5IYBdhLWcg3wnCj6 - Manse
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf - Matt Ball
12个回答

369
你可以使用 indexOf 方法:
var imageList = [100,200,300,400,500];
var index = imageList.indexOf(200); // 1

如果在数组中找不到该值,将返回-1。


2
你可以使用 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf 或任何 Javascript 框架来解决这个问题。 - voigtan
2
刚发现它不能在IE8中工作。 我的替代方案是什么? - joedborg
@voigtan 我该如何将这个添加到我的JS中? - joedborg
5
我已经完成了,谢谢。IE将有一天会赶上时代的步伐! - joedborg
如果在兼容模式下,最近的IE也无法正常工作。 - pelms
var arrayPosition = $.inArray( value, Array ); 在所有版本的IE中都可以工作。 - James Blackburn

103

使用mapindexOf来操作对象数组

var imageList = [
   {value: 100},
   {value: 200},
   {value: 300},
   {value: 400},
   {value: 500}
];

var index = imageList.map(function (img) { return img.value; }).indexOf(200);

console.log(index);


在现代浏览器中,您可以使用findIndex方法:


var imageList = [
   {value: 100},
   {value: 200},
   {value: 300},
   {value: 400},
   {value: 500}
];

var index = imageList.findIndex(img => img.value === 200);

console.log(index);

它是ES6的一部分,被Chrome、FF、Safari和Edge支持


1
请注意,在IE 11中未实现findIndex。 - Bindrid
3
@Bindrid 在答案中已经写了,可见:"它是ES6的一部分,被Chrome、FF、Safari和(不幸的是只有)IE Edge支持"。 - Jaqen H'ghar

18

使用 jQuery 的函数jQuery.inArray

jQuery.inArray( value, array [, fromIndex ] )
(or) $.inArray( value, array [, fromIndex ] )

本来想使用标记为正确答案的代码,但似乎该代码在所有版本的IE中都无法工作。这个答案在所有版本的IE中都有效,但我稍微改了一下代码: var arrayPosition = $.inArray( value, Array ); 完美运行。 - James Blackburn
8
jQuery ≠ Javascript。 - Andrew

17

这是另一种在JavaScript中查找复杂数组中值索引的方法。希望确实能帮到有需要的人。

假设我们有一个JavaScript数组,如下所示:

var studentsArray =
     [
    {
    "rollnumber": 1,
    "name": "dj",
    "subject": "physics"
   },
   {
   "rollnumber": 2,
  "name": "tanmay",
  "subject": "biology"
   },
  {
   "rollnumber": 3,
   "name": "amit",
   "subject": "chemistry"
   },
  ];

现在,如果我们需要选择数组中的特定对象。假设我们想找到名为Tanmay的学生的索引。

我们可以通过迭代数组并比较给定键处的值来实现这一点。

function functiontofindIndexByKeyValue(arraytosearch, key, valuetosearch) {

    for (var i = 0; i < arraytosearch.length; i++) {

    if (arraytosearch[i][key] == valuetosearch) {
    return i;
    }
    }
    return null;
    }
您可以使用以下函数查找特定元素的索引:

function_name

var index = functiontofindIndexByKeyValue(studentsArray, "name", "tanmay");
alert(index);

10

使用 indexOf

imageList.indexOf(200)

8
如何使用indexOf
alert(imageList.indexOf(200));

7

根据此页面 https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/indexOf,您需要使用Internet Explorer 9才能使用此功能(我几乎错误地认为我们只是在谈论IE 6)。 - Simon_Weaver
@Simon_Weaver 在你提供的那个页面上,有一个使用 JavaScript 1.6 及以上版本的 polyfill,适用于所有浏览器。 - Manse

6

可以使用ES6函数Array.prototype.findIndex

MDN说:

findIndex()方法返回数组中满足提供的测试函数的第一个元素的索引。否则返回-1。

var fooArray = [5, 10, 15, 20, 25];
console.log(fooArray.findIndex(num=> { return num > 5; }));

// expected output: 1

通过对象属性查找索引。

要通过对象属性查找索引:

yourArray.findIndex(obj => obj['propertyName'] === yourValue)

例如,有这样一个数组:
let someArray = [
    { property: 'OutDate' },
    { property: 'BeginDate'},
    { property: 'CarNumber' },
    { property: 'FirstName'}
];

然后,查找所需属性的索引的代码如下:

let carIndex = someArray.findIndex( filterCarObj=> 
    filterCarObj['property'] === 'CarNumber');

6
当列表不是非常长时,这是我知道的最好方法:
function getIndex(val) {
    for (var i = 0; i < imageList.length; i++) {
        if (imageList[i] === val) {
            return i;
        }
    }
}

var imageList = [100, 200, 300, 400, 500];
var index = getIndex(200);

4

在多维数组中


参考数组:

var array = [
    { ID: '100' },
    { ID: '200' },
    { ID: '300' },
    { ID: '400' },
    { ID: '500' }
];

使用 filterindexOf

var index = array.indexOf(array.filter(function(item) { return item.ID == '200' })[0]);

使用indexOf循环遍历数组中的每个项目:

for (var i = 0; i < array.length; i++) {
    var item = array[i];
    if (item.ID == '200') { 
        var index = array.indexOf(item);
    }
}

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