Ответ 1
function arraySearch(arr,val) {
for (var i=0; i<arr.length; i++)
if (arr[i] === val)
return i;
return false;
}
Я хочу создать функцию, которая работает следующим образом:
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).
Как я могу это исправить, или что я делаю неправильно?
Спасибо, и мне очень жаль, если мой английский не был достаточно ясным.
function arraySearch(arr,val) {
for (var i=0; i<arr.length; i++)
if (arr[i] === val)
return i;
return false;
}
Вы можете использовать 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
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;
}
Надеюсь, что это поможет:)
Теперь этот метод используется в прототипе Array: 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
Если вы планируете много находить индексы различных значений для конкретного массива, может быть лучше создать объект с парами ключ-значение, которые сопоставляются со значениями и индексами массива.
const letters = ["a", "b", "c"]
const letterIndices = letters.reduce((acc, letter, index) =>
Object.assign(acc, {[letter]: index}), {}
)
letterIndices["b"] // gives 1