Javascript ищет массив для значения и получает его ключ

Я хочу создать функцию, которая работает следующим образом:

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

Как я могу это исправить, или что я делаю неправильно?

Спасибо, и мне очень жаль, если мой английский не был достаточно ясным.

Ответ 1

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

Ответ 2

Вы можете использовать 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

Ответ 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;
}

Надеюсь, что это поможет:)

Ответ 5

Если вы планируете много находить индексы различных значений для конкретного массива, может быть лучше создать объект с парами ключ-значение, которые сопоставляются со значениями и индексами массива.

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

letterIndices["b"] // gives 1