JavaScript中如何使用indexOf与lastIndexOf,并与PHP作比较

作者:admin     字体:[增加 减小]    类型:原创
JavaScript中的indexOf与lastIndexOf用来搜索数组中具有给定值的元素,这与PHP的array_serach非常相似,本文给你讲讲它们的相似与不同,同时最后作者给出了大家一个非常好的函数,用来搜索所有的指定元素。

在讲JavaScript中的indexOf()和lastIndexOf()之前,作为我们这些phper来说,还是先回顾一下php中的同类函数比较好,在php中的类似函数是array_search,它的作用是在数组中搜索给定的值,如果成功则返回相应的键名

$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');
echo array_search('green', $array),     // 2;
    "<br />\n",
    array_search('red', $array);        // 1;

像JavaScript中的lastIndexOf()方法在PHP中没有对应函数。不过在php中有一个检查数组中是否存在某个值的非常好用的函数in_array,在JavaScript中也只有indexOf与它较为相似。

切入正文,indexOf()和lastIndexOf()搜索整个数组中具有给定值的元素,返回找到的第一个元素的索引或者如果没有找到就返回-1。indexOf()从头至尾搜索,而lastIndexOf()则反向搜索。

var a = ['blue', 'red','green', 'red'];
console.log(a.indexOf('red'));  //1
console.log(a.indexOf('red',2));    //3,从'green'开始搜索
console.log(a.indexOf('red',1));    //1,从最后一个开始倒着搜索 
console.log(a.indexOf('red',2));    //3,从'green'开始倒着搜索

这里要注意的是,indexOf()和lastIndex()方法不接收一个函数作为其参数。第一个参数是需要搜索的值,第二个参数是可选的:它指定数组中的一个索引,从那里开始搜索。如果省略该参数,indexOf()从头开始搜索,而lastIndexOf()从末尾开始搜索。第二个参数是负数,它代表相对数组末尾的偏移量。

下面给出一个在数组中搜索所有给定值的方法,非常好用,而且我已经写了非常详细的解释

/**
    在数组中查找所有出现的x,并返回一个包含匹配索引的数组
*/
Array.prototype.searchAll = function(x){
    var results = [],           //将会返回的数组
        len = this.length,      //待搜索数组长度
        pos = 0;                //开始搜索的位置
    while( pos<len ){           //循环搜索多个元素
        pos = a.indexOf(x,pos); //搜索
        if (-1===pos) break;    //未找到,就完成搜索
        results.push(pos++);    //否则,在数组中存储索引
    }
    return results;
}

下面给一个使用该方法的实例

var a = ['blue', 'red','green', 'red'];
console.log(a.searchAll('red'));    ////[1, 3, searchAll: function]

本文php代码是用ThinkPHP进行演示的。

在ThinkPHP中的控制器中演示使用array_search函数