JavaScript中是否有一种方法可以比较一个数组中的值,并查看它是否在另一个数组中?
类似于PHP的in_array函数?
JavaScript中是否有一种方法可以比较一个数组中的值,并查看它是否在另一个数组中?
类似于PHP的in_array函数?
当前回答
如果索引不是按顺序排列的,或者索引不是连续的,那么这里列出的其他解决方案中的代码将会中断。一个更好的解决方案可能是:
function in_array(needle, haystack) {
for(var i in haystack) {
if(haystack[i] == needle) return true;
}
return false;
}
而且,作为额外的奖励,这里有与PHP的array_search(用于查找数组中元素的键值)等效的函数:
function array_search(needle, haystack) {
for(var i in haystack) {
if(haystack[i] == needle) return i;
}
return false;
}
其他回答
有一个叫Locutus的项目,它在Javascript和in_array()中实现了PHP函数,你可以像在PHP中使用一样使用它。
用法示例:
in_array('van', myArray);
in_array(1, otherArray, true); // Forcing strict type
对于Dojo Toolkit,您将使用Dojo . indexof()。看到dojo。用于文档的是indexOf,用于示例的是Bryan Forbes的Arrays Made Easy。
PHP:
if (in_array('a', ['a', 'b', 'c'])) {
// do something if true
}
我在JS中的解决方案:
if (['a', 'b', 'c'].includes('a')) {
// do something if true
}
数组中。indexOf是在JavaScript 1.6中引入的,但旧的浏览器不支持它。值得庆幸的是,Mozilla的伙计们已经为你做了所有艰苦的工作,并为你提供了以下兼容性:
if (!Array.prototype.indexOf)
{
Array.prototype.indexOf = function(elt /*, from*/)
{
var len = this.length >>> 0;
var from = Number(arguments[1]) || 0;
from = (from < 0)
? Math.ceil(from)
: Math.floor(from);
if (from < 0)
from += len;
for (; from < len; from++)
{
if (from in this &&
this[from] === elt)
return from;
}
return -1;
};
}
甚至还有一些方便的使用代码片段供您编写脚本。
如果索引不是按顺序排列的,或者索引不是连续的,那么这里列出的其他解决方案中的代码将会中断。一个更好的解决方案可能是:
function in_array(needle, haystack) {
for(var i in haystack) {
if(haystack[i] == needle) return true;
}
return false;
}
而且,作为额外的奖励,这里有与PHP的array_search(用于查找数组中元素的键值)等效的函数:
function array_search(needle, haystack) {
for(var i in haystack) {
if(haystack[i] == needle) return i;
}
return false;
}