如何找到具有值的数组索引?
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】:对于对象数组,使用map
和indexOf
:
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'
];
使用filter
和indexOf
:
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=includesincludes
returns a Boolean indicating if the array contains the value specified.以上是关于如何找到具有值的数组索引?的主要内容,如果未能解决你的问题,请参考以下文章
对于 np.array 中的每个元素,找到具有相同元素值的最大索引 [关闭]