Javascript 在数组中搜索一个值并获取它的键
Posted
技术标签:
【中文标题】Javascript 在数组中搜索一个值并获取它的键【英文标题】:Javascript search an array for a value and get its key 【发布时间】: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 是唯一真正满足您对重复键要求的。
【参考方案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
【讨论】:
以上是关于Javascript 在数组中搜索一个值并获取它的键的主要内容,如果未能解决你的问题,请参考以下文章
ActionScript 3 AS3在数组中搜索值并返回其位置索引