JavaScript伺服器端進階編程(Array.indexOf()和lastIndexOf()方法)

來源:互聯網
上載者:User

標籤:javascript伺服器端進階編程(array.indexof()和lastindexof()方法)

文法格式:

array.indexOf(searchElement[, fromIndex]);

array.lastIndexOf(searchElement[, fromIndex]);

功能:返回某個指定的元素值在數組中首次出現的位置。該方法將從頭到尾地檢索數組,看它是否含有元素searchElement。開始檢索的位置在數組的fromIndex處或數組的開頭(沒有指定fromIndex時)。如果找到一個相匹配的元素,則返回此元素的第一次出現的位置。如果沒有找到,則返回-1。

注意:lastIndexOf方法從數組結束處由後往前搜尋。

對於indexOf方法fromIndex的值應當為大於或者等於0的整數;如果為負整數,則返回-1。

對於lastIndexOf方法fromIndex的值也可能為負整數。當為負整數時,表達從結尾的第|fromIndex|個元素開始往前搜尋。

 

舉例:
var index = [12, 5, 8, 130, 44].indexOf(8);  //預設從索引0開始搜尋,結果index=>2[12, 5, 8, 130, 44].indexOf(130,1);  //從索引值1處搜尋,輸出3[12, 5, 8, 130, 44].indexOf(130,-1);  //輸出-1["Hello"," Hello","Hello "," Hello ","hello"].lastIndexOf(‘hello‘,-1); //輸出4["Hello"," Hello","Hello "," Hello ","hello"].lastIndexOf(‘hello‘,0); //輸出-1["Hello"," Hello","Hello "," Hello ","hello"].lastIndexOf(‘ Hello ‘,-2); //輸出3

 

 


indexOflastIndexOf方法使用全等(===)來判斷一個元素是否存在於數組中。搜尋字串及數字可能沒有問題,但是搜尋對象和數組可能會有問題。如下的代碼片斷便給出有力證明:

var arr = [    {"name": "Zhang","blog": "http://www.zhang.com"},    {"name": "John","blog": "http://www.john.com"},    {"name":"李四","blog":"http://www.lisi.com"}];var index=arr.indexOf({"name": "Zhang","blog": "http://www.zhang.com"});console.log("index: ",index);  //輸出:index:  -1var o1={"name": "Zhang","blog": "http://www.zhang.com"},   o2={"name":"李四","blog":"http://www.lisi.com"};var arr_2=[o1,o2];var index_2= arr_2.indexOf(o2);console.log("index_2: ",index_2);  //輸出:index:  1 //Ex3var arr_3=[[1,2,3],[‘one‘,‘two‘,‘three‘]];var a1=[1,2,3];var a2=[‘one‘,‘two‘,‘three‘];var index_3=arr_3.indexOf(a1);console.log("index_3: ",index_3);  //輸出:index:  -1 var arr_4=[a1,a2];var index_4=arr_4.indexOf(a1);console.log("index_4: ",index_4);  //輸出:index_4:  0

上面的第1個例子輸出結果為-1,為什嗎?其實問題在於判斷兩個對象是否相等的問題。JS開發中,判斷兩個對象是否相等時,只有兩個對象指向相同的地址,這兩個對象才是相等的;有時,可能存在兩個對象的屬性和值都相等,但是這兩個對象仍然不相等。對於兩個數組(也是對象)判斷相等,原理同樣。

 

工具 + 生產力函數findAll

下面給出一個簡單的工具 + 生產力函數findAll,基於indexOf,用於找出數組中匹配的所有元素所在下標。此函數返回所有下標組成的數組。

function findAll(arr,value){    var results=[],len=arr.length,pos=0;     while(pos<len){        pos=arr.indexOf(value,pos);        if(pos===-1) break;        results.push(pos);        pos++;    }    return results;}var indice=findAll([,1,2,3,4,5,6,3,,5,7,89,3,2,3],3);console.log(‘indice: ‘,indice);//結果:indice:  [ 3, 7, 12, 14 ]通用解決方案(適合ECMAScript3和ECMAScript5)
 Array.prototype.indexOf = Array.prototype.indexOf || function (value, start) {        if (start && typeof start !== ‘number‘) {            throw TypeError(start + ‘ is not a number‘);        }        var start = start || 0,            len = this.length;        if (start > 0) {            start = Math.floor(start);        } else if (start < 0) {            start = Math.ceil(start) + len;        }        for (var i = start; i < len; i++) {            if (this[i] === value) {                return i;            }        }        return -1;    };     Array.prototype.lastIndexOf = Array.prototype.lastIndexOf || function (value, start) {        if (start && typeof start !== ‘number‘) {            throw TypeError(start + ‘ is not a number‘);        }        var len = this.length,            start = start || len - 1;        if (start > 0) {            start = Math.floor(start);        } else if (start < 0) {            start = Math.ceil(start) + len;        }        for (var i = start; i >= 0; i--) {            if (this[i] === value) {                return i;            }        }        return -1;    };

 

本文出自 “青峰” 部落格,請務必保留此出處http://zhuxianzhong.blog.51cto.com/157061/1651751

JavaScript伺服器端進階編程(Array.indexOf()和lastIndexOf()方法)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.