【问题标题】:Javascript search an array for a value and get its keyJavascript 在数组中搜索一个值并获取它的键
【发布时间】:2012-10-18 01:35:48
【问题描述】:

我想做一个像这样工作的函数:

function arraySearch(array, valuetosearchfor)
{
// some code
}

如果它在数组中找到值,它将返回找到值的键。如果有多个结果(多个键),或根本没有结果(未找到),则该函数将返回 FALSE。

我找到了这段代码:

function arraySearch(arr,val) 
        {
            for (var i=0; i<arr.length; i++)
                {
                    if (arr[i] == val) 
                    {                    
                        return i;
                    }
                    else 
                    {
                        return false;
                    }
                }
        }

并像这样使用它:

var resultofarraycheck = arraySearch(board, chosen);
                if (resultofarraycheck === false) 
                {
                       document.getElementById(buttonid).value;
                       chosen = 0;
                }

但它似乎不起作用。 当它应该找到某些东西时,它返回 false 而不是键 (i)。

我该如何解决这个问题,或者我做错了什么?

谢谢,如果我的英语不够清楚,我很抱歉。

【问题讨论】:

  • return false 移动到 for 循环之后。 (并考虑处理具有多个相同结果的案例。)
  • Iqbal Djulfri's answer 是唯一真正满足您对重复键要求的。

标签: javascript arrays search


【解决方案1】:

您可以使用 indexOf 获取密钥jsfiddle

if(!Array.prototype.indexOf){
    Array.prototype.indexOf = function(val){
        var i = this.length;
        while (i--) {
            if (this[i] == val) return i;
        }
        return -1;
    } 
}

    var arr = ['a','b','c','d','e'];

    var index = arr.indexOf('d'); // return 3

【讨论】:

  • 反之亦然,我想从value中获取key
  • @DCoder 我添加了对 IE 的支持
  • @shohamh 不,不是。他提供了不好的例子,但它可以按你的意愿工作。 ['a', 'b', 'c'].indexOf('a') 将返回 0。
【解决方案2】:
function arraySearch(arr,val) {
    for (var i=0; i<arr.length; i++)
        if (arr[i] === val)                    
            return i;
    return false;
  }

【讨论】:

    【解决方案3】:
    function arraySearch(arr, val) {
      var index;
      for (var i = 0; i < arr.length; i++) {
        // use '===' if you strictly want to find the same type
        if (arr[i] == val) {
          if (index == undefined) index = i;
          // return false if duplicate is found
          else return false;
        }
      }
    
      // return false if no element found, or index of the element
      return index == undefined ? false : index;
    }
    

    希望这会有所帮助:)

    【讨论】:

      【解决方案4】:

      这是 Array Prototype 现在的一个方法: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex

      var array1 = [5, 12, 8, 130, 44];
      
      function findFirstLargeNumber(element) {
        return element > 13;
      }
      
      console.log(array1.findIndex(findFirstLargeNumber));
      // expected output: 3
      

      【讨论】:

        【解决方案5】:

        如果您计划大量查找特定数组的不同值的索引,最好使用映射到数组的值和索引的键值对创建一个对象。

        const letters = ["a", "b", "c"]
        const letterIndices = letters.reduce((acc, letter, index) => 
            Object.assign(acc, {[letter]: index}), {}
        )
        
        letterIndices["b"] // gives 1
        

        【讨论】:

          猜你喜欢
          • 2017-10-27
          • 2019-09-20
          • 1970-01-01
          • 2015-03-24
          • 2011-01-30
          • 1970-01-01
          • 2012-06-02
          • 2012-06-14
          • 2021-12-27
          相关资源
          最近更新 更多