成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

愛(ài)上Javascript數(shù)組Array(二)——方法解讀

CoffeX / 1443人閱讀

摘要:返回一個(gè)將數(shù)組所有元素用分隔符拼接成的字符串,默認(rèn)分隔符為逗號(hào)。重復(fù)的次數(shù)就是數(shù)組長(zhǎng)度減一,因?yàn)樽址欠指舴?。由于?shù)組本身是對(duì)象,擁有方法,利用它也能實(shí)現(xiàn)將數(shù)組拼接成一個(gè)字符串,只不過(guò)分隔符只能是逗號(hào)了。

接上一篇《愛(ài)上Javascript數(shù)組Array(一)——基礎(chǔ)介紹》,這一篇詳細(xì)介紹Array的所有方法。

所有數(shù)組的方法都定義在Array.prototype上,而Array.prototype本身也是一個(gè)數(shù)組。

array.concat()

淺復(fù)制一份當(dāng)前數(shù)組,并把接收到的參數(shù)附加到新數(shù)組的末尾。原數(shù)組不改變。

語(yǔ)法

array.concat(value1, value2, ..., valueN)

參數(shù)為需要合并的數(shù)組或非數(shù)組值

var arr1 = [1, 2, 3];
var obj = {animal : "monkey"};
var arr2 = arr1.concat([4, 5, 6], obj, [7, 8, 9]);
// arr1 [1, 2, 3]
// arr2 [1, 2, 3, 4, 5, 6, {animal : "monkey"}, 7, 8, 9]

obj.animal = "tiger";
// [1, 2, 3, 4, 5, 6, {animal : "tiger"}, 7, 8, 9]

可以合并數(shù)組或非數(shù)組值,但是要注意如果包含對(duì)象,對(duì)象還是引用原來(lái)的對(duì)象。

array.join()

返回一個(gè)將數(shù)組所有元素用分隔符拼接成的字符串,默認(rèn)分隔符為逗號(hào)。

語(yǔ)法

array.join(seperator)

參數(shù)為分割符

var arr1 = [1, 2, 3];
var str = arr1.join(); // 1,2,3
str = arr1.join("#"); // 1#2#3

當(dāng)將大量字符串片段組裝時(shí),join方法比+元素運(yùn)算符要快。

利用new Array(3)將生成一個(gè)長(zhǎng)度為三的空數(shù)組,同時(shí)結(jié)合join()方法,可以實(shí)現(xiàn)重復(fù)某段字符串。

var str = new Array(3).join("-+"); // -+-+

重復(fù)的次數(shù)就是數(shù)組長(zhǎng)度減一,因?yàn)樽址欠指舴?/p>

由于數(shù)組本身是對(duì)象,擁有toString()方法,利用它也能實(shí)現(xiàn)將數(shù)組拼接成一個(gè)字符串,只不過(guò)分隔符只能是逗號(hào)了。

var arr1 = [1, 2, 3];
arr1.toString(); // 1,2,3

實(shí)際上它會(huì)先調(diào)用每一個(gè)元素的toString()方法。

array.push()

把一個(gè)或多個(gè)參數(shù)附加在數(shù)組末尾,返回?cái)?shù)組長(zhǎng)度。改變數(shù)組自身。

語(yǔ)法

array.push(value1, value2, ..., valueN);

實(shí)例

var arr1 = [1, 2, 3];
var len = arr1.push(4, 5);

console.log(len); // 5
console.log(arr1); // [1, 2, 3, 4, 5]

另一種方法也可以實(shí)現(xiàn)在數(shù)組末尾插入值。

arr1[arr1.length] = 6; // [1, 2, 3, 4, 5, 6]   
array.pop()

將數(shù)組最后一項(xiàng)刪除,并返回刪除項(xiàng)。改變數(shù)組自身。

var arr1 = [1, 2, 3];
arr.pop(); // [1, 2] 返回 3

如果數(shù)組為空,返回undefined。

array.unshift()

把一個(gè)或多個(gè)參數(shù)插入到數(shù)組頭部,返回?cái)?shù)組長(zhǎng)度。改變數(shù)組自身。

var arr1 = [1, 2, 3];
var len = arr1.unshift(4, 5);

console.log(len); // 5
console.log(arr1); // [4, 5, 1, 2, 3]
array.shift()

將數(shù)組的第一項(xiàng)刪除,并返回刪除項(xiàng)。改變數(shù)組自身。

var arr1 = [1, 2, 3];
arr.shift(); // [2, 3] 返回 1

如果數(shù)組為空,返回undefined。

array.sort()

這個(gè)方法按照每個(gè)元素的toString()方法返回的值進(jìn)行排序,所以一般得不到期望的結(jié)果。

var arr1 = [1, 2, 3, 14, 24];
arr1.sort(); // [1, 14, 2, 24, 3]

但是sort()方法可以接收一個(gè)我們自定義的函數(shù)進(jìn)行比較。比較函數(shù)接受兩個(gè)參數(shù),尤其sort()默認(rèn)是升序,所以如果想讓第一個(gè)參數(shù)位于第二個(gè)參數(shù)前面就要返回負(fù)數(shù),相等返回0,位于后面返回正數(shù)。

var compare = function(a, b){
    return a - b;
}

var arr2 = [1, 12, 2, 23, 3 , 5, 4];
arr2.sort(compare); // [1, 2, 3, 4, 5, 12, 23]

比較字符串可以結(jié)合string.localeCompare()方法來(lái)用。

var arr3 = ["F", "e", "f", "E"];
arr3.sort(function(a, b){
    return a.localeCompare(b);
});
// ["e", "E", "f", "F"] 
array.reverse()

反轉(zhuǎn)數(shù)組元素順序,返回?cái)?shù)組自身。

var arr1 = [1, 4, 3, 2];
arr1.reverse(); // [2, 3, 4, 1]
array.slice()

對(duì)數(shù)組淺復(fù)制其中的一段,不改變數(shù)組自身。

array.slice(start, end);

方法接受兩個(gè)參數(shù),最后一個(gè)可以省略,默認(rèn)是數(shù)組自身長(zhǎng)度。

var arr1 = [1, 2, 3, 4, 5, 6];

arr1.slice(4); // [5, 6]
arr1.slice(2, 4); // [3, 4]
arr1.slice(-3); // [4, 5, 6]

如果傳入負(fù)數(shù),那么會(huì)被自動(dòng)加上數(shù)組的長(zhǎng)度,試圖變成非負(fù)數(shù)。
傳入一個(gè)絕對(duì)值小于數(shù)組長(zhǎng)度的值,就是從后向前取負(fù)數(shù)絕對(duì)值個(gè)數(shù)的元素。例如例子中取了后三個(gè)元素。

另一個(gè)用法就是將函數(shù)參數(shù)arguments轉(zhuǎn)換為一個(gè)正常的數(shù)組。數(shù)組太大,性能不太好,權(quán)衡一下再使用。

Array.prototype.slice.call(arguments);
array.splice()

這是數(shù)組中最強(qiáng)大也最常用對(duì)的方法了,可以實(shí)現(xiàn)刪除,插入,替換。

語(yǔ)法

array.slice(start, count, item);

該方法移除一個(gè)或多個(gè)元素,并用新的元素替代他們。start是開(kāi)始的位置,count是刪除的數(shù)量,item是新增加的元素(item不止一個(gè),也可省略),以數(shù)組形式返回刪除的元素。

var arr1 = [1, 2, 3, 4, 5];
//刪除
arr1.splice(2, 1); // [1, 2, 4, 5]  返回 [3]
//插入
arr1.splice(3, 0, 6, 7); // [1, 2, 4, 6, 7, 5]
//替換
arr1.splice(1, 2, 8, 9); // [1, 8, 9, 6, 7, 5]  返回[2, 4]

下面介紹一些ECMAScript5新增的方法,主要是ie8不支持。

indexOf() 與 lastIndexOf()

查找對(duì)應(yīng)項(xiàng)在數(shù)組中的索引位置,第二個(gè)參數(shù)表示對(duì)應(yīng)查找方向的起始位置,返回第一個(gè)匹配的位置,如果沒(méi)有找到則返回-1;
indexOf()是從前往后查找,lastIndexOf()是從后往前查找。

var arr1 = [1, 2, 3, 4, 3, 2, 1];
arr1.indexOf(2); // 1
arr1.indexOf(2, 3); // 5

arr1.lastIndexOf(3); // 4
arr1.lastIndexOf(3, 4) // 2
迭代方法

以下方法接受兩個(gè)參數(shù),第一個(gè)是每一項(xiàng)運(yùn)行的函數(shù),第二個(gè)函數(shù)運(yùn)行的作用域。
運(yùn)行函數(shù)有三個(gè)參數(shù),分別是當(dāng)前項(xiàng),位置,數(shù)組本身。

array.every()

運(yùn)行給定函數(shù),如果迭代每一項(xiàng)都返回true,則最終返回true。

var arr1 = [1, 2, 3, 4, 5];
arr1.every(function(item, index, array){
    return item > 3;
});
// false
array.some()

運(yùn)行給定函數(shù),如果迭代中有一項(xiàng)返回true,則最終返回true。

arr1.some(function(item, index, array){
    return item > 3;
});
// true
array.map()

運(yùn)行給定函數(shù),將迭代中返回的值組成數(shù)組,返回該數(shù)組。

arr1.map(function(item, index, array){
    return item * 2;
});
// [2, 4, 6, 8, 10]
array.filter()

運(yùn)行給定函數(shù),將迭代中返回true的元素以數(shù)組形式返回

arr1.filter(function(item, index, array){
    return item > 3;
});
// [4, 5]
array.forEach()

運(yùn)行給定函數(shù),不返回任何值。類(lèi)似于普通的for循環(huán)的功能。

歸并方法

函數(shù)接受兩個(gè)參數(shù),第一個(gè)參數(shù)是每一個(gè)運(yùn)行的自定義函數(shù),第二項(xiàng)是作為歸并基礎(chǔ)的初始值。
自定義函數(shù)接受四個(gè)參數(shù),分別是前一項(xiàng),當(dāng)前項(xiàng),位置,數(shù)組。

array.reduce() 與 array.reduceRight()
var splitstr = function(prev, item, index, array){
    return prev + "#" + item;
}

var arr1 = [1, 2, 3, 4, 5];
arr1.reduce(splitstr, 8); // 8#1#2#3#4#5
arr1.reduceRight(splitstr, 8); // 8#5#4#3#2#1
小結(jié)

這一篇介紹了數(shù)組方法的種種細(xì)節(jié)和注意問(wèn)題,下一篇將會(huì)介紹數(shù)組更高級(jí)的用法。本篇后續(xù)會(huì)添加ECMAScript6 新增加的數(shù)組方法的介紹。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/78877.html

相關(guān)文章

  • 愛(ài)上Javascript數(shù)組Array(一)——基礎(chǔ)介紹

    摘要:數(shù)組是一種類(lèi)數(shù)組的對(duì)象,擁有對(duì)象的特性。檢測(cè)對(duì)象是否為數(shù)組眾所周知,不能正確檢測(cè)類(lèi)型。值等于數(shù)組最大的整數(shù)屬性名加。長(zhǎng)度為,只包含一個(gè)元素的數(shù)組設(shè)小值將將會(huì)把屬性名大于等于的屬性刪除。下一篇介紹的方法。 Javascript,一門(mén)神奇的語(yǔ)言,它的數(shù)組也同樣獨(dú)特。我們要去其糟粕,取其精華,把常用的最優(yōu)實(shí)踐總結(jié)出來(lái)。如有錯(cuò)誤,請(qǐng)指出。 javascript數(shù)組是一種類(lèi)數(shù)組的對(duì)象,擁有對(duì)象的...

    Jingbin_ 評(píng)論0 收藏0
  • JS高級(jí)講解面向?qū)ο?,原型,繼承,閉包,正則表達(dá)式,讓你徹底愛(ài)上前端(進(jìn)階

    摘要:通過(guò)構(gòu)造函數(shù)得到的實(shí)例對(duì)象內(nèi)部會(huì)包含一個(gè)指向構(gòu)造函數(shù)的對(duì)象的指針。 JavaScript 高級(jí) 學(xué)習(xí)目標(biāo): 理解面向?qū)ο箝_(kāi)發(fā)思想 掌握 JavaScript 面向?qū)ο箝_(kāi)發(fā)相關(guān)模式 掌握在 JavaScript 中使用正則表達(dá)式 面向?qū)ο蠼榻B 程序中面向?qū)ο蟮幕倔w現(xiàn) 在 JavaScript 中,所有數(shù)據(jù)類(lèi)型都可以視為對(duì)象,當(dāng)然也可以自定義對(duì)象。自定義的對(duì)象數(shù)據(jù)類(lèi)型就是面向?qū)ο笾?..

    Nino 評(píng)論0 收藏0
  • JS高級(jí)講解面向?qū)ο?,原型,繼承,閉包,正則表達(dá)式,讓你徹底愛(ài)上前端(進(jìn)階

    摘要:通過(guò)構(gòu)造函數(shù)得到的實(shí)例對(duì)象內(nèi)部會(huì)包含一個(gè)指向構(gòu)造函數(shù)的對(duì)象的指針。 JavaScript 高級(jí) 學(xué)習(xí)目標(biāo): 理解面向?qū)ο箝_(kāi)發(fā)思想 掌握 JavaScript 面向?qū)ο箝_(kāi)發(fā)相關(guān)模式 掌握在 JavaScript 中使用正則表達(dá)式 面向?qū)ο蠼榻B 程序中面向?qū)ο蟮幕倔w現(xiàn) 在 JavaScript 中,所有數(shù)據(jù)類(lèi)型都可以視為對(duì)象,當(dāng)然也可以自定義對(duì)象。自定義的對(duì)象數(shù)據(jù)類(lèi)型就是面向?qū)ο笾?..

    source 評(píng)論0 收藏0
  • 也談面試必備問(wèn)題之 JavaScript 數(shù)組去重

    摘要:而數(shù)組元素去重是基于運(yùn)算符的。而如果有迭代函數(shù),則計(jì)算傳入迭代函數(shù)后的值,對(duì)值去重,調(diào)用方法,而該方法的核心就是調(diào)用方法,和我們上面說(shuō)的方法一異曲同工。 Why underscore (覺(jué)得這部分眼熟的可以直接跳到下一段了...) 最近開(kāi)始看 underscore.js 源碼,并將 underscore.js 源碼解讀 放在了我的 2016 計(jì)劃中。 閱讀一些著名框架類(lèi)庫(kù)的源碼,就好像...

    Coly 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<