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

Posted

技术标签:

【中文标题】如何找到具有值的数组索引?【英文标题】:How to find the array index with a value? 【发布时间】:2011-11-12 21:27:06 【问题描述】:

说我有这个

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

这给了我

[0]100 [1]200

javascript 中有什么方法可以返回带有值的索引吗?

即我想要 200 的索引,我得到返回 1

【问题讨论】:

这里的答案很好 -> ***.com/questions/237104/… developer.mozilla.org/en/JavaScript/Reference/Global_Objects/… 【参考方案1】:

你可以使用indexOf:

var imageList = [100,200,300,400,500];
var index = imageList.indexOf(200); // 1

如果在数组中找不到值,你会得到-1。

【讨论】:

您可以使用 developer.mozilla.org/en/JavaScript/Reference/Global_Objects/… 或任何 Javascript 框架来解决此问题。 刚刚发现它在 IE8 中不起作用。我的选择是什么? @voigtan 如何将它添加到我的 JS 中? 我已经完成了,谢谢。 IE 总有一天会赶上现代! 如果在兼容模式下也不会在最近的 IE 中工作【参考方案2】:

对于对象数组,使用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 和supported by Chrome、FF、Safari 和 Edge 的一部分

【讨论】:

注意findIndex在IE 11中没有实现 @Bindrid 它写在答案中,请参阅“它是 ES6 的一部分,并受 Chrome、FF、Safari 和(不幸的是)IE edge 支持”【参考方案3】:

使用jQuery的函数 jQuery.inArray

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

【讨论】:

本打算使用标记为正确答案的代码,但似乎该代码不适用于所有版本的 IE。这个答案适用于所有版本的 IE,但我稍微更改了代码: var arrayPosition = $.inArray(value, Array);完美运行 jQuery ≠ Javascript【参考方案4】:

这是另一种在 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;
    

您可以使用该功能来查找特定元素的索引,如下所示,

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

【讨论】:

【参考方案5】:

使用 indexOf

imageList.indexOf(200)

【讨论】:

【参考方案6】:

indexOf 怎么样?

alert(imageList.indexOf(200));

【讨论】:

【参考方案7】:

Array.indexOf 在某些版本的 Internet Explorer 中不起作用 - 虽然有很多替代方法...请参阅此问题/答案:How do I check if an array includes an object in JavaScript?

【讨论】:

根据此页面developer.mozilla.org/en-US/docs/JavaScript/Reference/…,您需要 Internet Explorer 9 才能使用此功能(我几乎错误地认为我们只是在这里谈论 IE 6) @Simon_Weaver 在您链接的那个页面上,所有使用 JavaScript 1.6 及更高版本的浏览器都有一个 polyfill【参考方案8】:

当列表不是很长时,这是我所知道的最好方法:

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);

【讨论】:

【参考方案9】:

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

MDN says:

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');

【讨论】:

【参考方案10】:

在多维数组中


参考数组:

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);
    

【讨论】:

【参考方案11】:

这是我的看法,似乎大多数人的解决方案不检查项目是否存在,如果不存在,它会删除随机值。

首先通过looking for it's index检查元素是否存在。 如果确实存在,请使用splice 方法按其索引将其删除

elementPosition = array.indexOf(value);

if(elementPosition != -1) 
  array.splice(elementPosition, 1);

【讨论】:

【参考方案12】:
// Instead Of 
var index = arr.indexOf(200)

// Use 
var index = arr.includes(200);

请注意:Includes函数是数组上的一个简单实例方法,有助于轻松找到一个项目是否在数组中(包括NaN,不像indexOf)

【讨论】:

除了这个只告诉你它是否存在,而不是获取索引/项目,要认识到兼容性(即没有IE):caniuse.com/#search=includes includes returns a Boolean indicating if the array contains the value specified.

以上是关于如何找到具有值的数组索引?的主要内容,如果未能解决你的问题,请参考以下文章

具有索引值的线性搜索返回数组位于

如何在数组中找到具有相同键值的对象?

对于 np.array 中的每个元素,找到具有相同元素值的最大索引 [关闭]

如何编写一个函数来找到具有最低值的索引

在 1D NumPy 数组中查找值的索引/位置(具有相同的值)[重复]

在具有特定键的特定值的数组中查找对象的索引[重复]