【问题标题】: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

【问题讨论】:

标签: javascript arrays indexof


【解决方案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)

                【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2019-08-27
                • 1970-01-01
                • 2018-04-25
                • 2016-08-21
                • 2014-05-19
                • 1970-01-01
                相关资源
                最近更新 更多