Javascript在数组中搜索值并获取其密钥

时间:2012-10-28 14:38:29

标签: javascript arrays search

我想创建一个像这样的函数:

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

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

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

5 个答案:

答案 0 :(得分:19)

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

答案 1 :(得分:13)

您可以使用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

答案 2 :(得分:2)

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

希望这会有所帮助:)

答案 3 :(得分:1)

这是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

答案 4 :(得分:0)

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

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

letterIndices["b"] // gives 1