例如,名为arrayElements的数组类型的变量包含[1,2,3,4]。
除了使用循环外,如何获得数组变量中值为“3”的位置?
感谢。
答案 0 :(得分:43)
考虑使用indexOf
,它返回数组中元素的从0开始的位置。
e.g。
[1,2,3,4].indexOf(3); // produces 2
请注意,此方法在IE 8及以下版本中不可用。
答案 1 :(得分:4)
jQuery为您提供了“inArray”功能,类似于PHP:
var a = [1,2,3,4];
console.log( jQuery.inArray(3, a) ); //returns 2
如果你已经在项目中使用了jQuery,那么这就是你要走的路! 如果可能,jQuery使用indexOf(最快的解决方案),如果没有,则返回基于循环的解决方案。
答案 2 :(得分:2)
或者简单地使用for循环:
function getPosition(elementToFind, arrayElements) {
var i;
for (i = 0; i < arrayElements.length; i += 1) {
if (arrayElements[i] === elementToFind) {
return i;
}
}
return null; //not found
}
getPosition(3, [1, 2, 3, 4]);
答案 3 :(得分:0)
正如一些答案已经指出的那样,新版浏览器中的数组有indexOf
map
和forEach
这样的方法非常方便避免书写for-loops。
如果你需要支持没有这些功能的旧环境,我会强烈推荐使用库(或者自己编写一个)来实现那些非常常见的数组操作(类似于soc的建议)。
var arrayfn = (function(){
var M = {};
M.indexOf = function(array, item){ ... };
M.contains = function(array, item){ return M.indefOf(array, item) !== -1; };
M.map = function(array, callback){ ... };
}());
arrayfn.contains([1,2,3], 2);
最流行的JS框架应该已经拥有大部分内置版本。在我的脑海中,我记得Dojo,jQuery和Underscore有一些这样的功能,例如。
答案 4 :(得分:-1)
此示例仅演示可以使用map()
返回数组的每个元素。一旦我们拥有它,我们将检索数组中的元素索引:
function searchPosition(elementToFind, array) {
return array.map(function(el) {
return el;
}).indexOf(elementToFind);
}
searchPosition(3, [1, 2, 3, 4]); // returns 2
<强>奖金:强>
这不是OP问题的一部分,但是如果要检索满足特定条件的数组中第一个元素的位置,可以使用ES6中提供的findIndex()
函数来完成:
var array = [101, 90, 104, 80];
function findFirstLessNumber(element) {
return element < 100;
}
console.log(array.findIndex(findFirstLessNumber)); // returns 1 (the position of 90)