成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

一次掌握 JavaScript ES5 到 ES8 數(shù)組內(nèi)容

baiy / 1348人閱讀

摘要:可選到該位置前停止讀取數(shù)據(jù),默認(rèn)等于數(shù)組長(zhǎng)度。找出第一個(gè)符合條件的數(shù)組元素,參數(shù)是一個(gè)回調(diào)函數(shù),所有數(shù)組元素依次執(zhí)行該回調(diào)函數(shù),直到找出第一個(gè)返回值為的元素,然后返回該元素?;卣{(diào)函數(shù)可以接受三個(gè)參數(shù),依次為當(dāng)前的值當(dāng)前的位置和原數(shù)組。

ECMAScript 5.1 中提供的數(shù)組方法

ECMA-262/5.1 規(guī)范

判斷是否是數(shù)組
Array.isArray ( arg )
// false or true

不支持此方法的IE9-等瀏覽器可以這樣處理:

Object.prototype.toString.call(obj) === "[object Array]";
轉(zhuǎn)換方法 toString

數(shù)組的 valueOf 會(huì)默認(rèn)調(diào)用 toString 方法,所以他們的返回值一樣,都是逗號(hào)分隔每一項(xiàng)組成的字符串

var months = ["Jan", "Feb", "Mar", "Apr"];
months.toString(); // "Jan,Feb,Mar,Apr"
toLocaleString

調(diào)用數(shù)組每一項(xiàng)的 toLocaleString 方法,有時(shí)和 toString 方法的結(jié)果是一樣的。有時(shí)也不同,比如 Date 對(duì)象元素組成的數(shù)組里,返回的結(jié)果會(huì)不同。

join
a.join();      // "Wind,Rain,Fire"
a.join(", ");  // "Wind, Rain, Fire"
a.join(" + "); // "Wind + Rain + Fire"
a.join("");    // "WindRainFire"

如果數(shù)組中的某一項(xiàng)的值是 null 或者 undefined,那么該值在 join()、toLocale-String()、toString()valueOf() 方法返回的結(jié)果中以空字符串表示

棧方法 pop 刪除數(shù)組的最后一項(xiàng)

操作原數(shù)組,返回刪除項(xiàng)

var a = [1, 2, 3];
var b = a.pop();

console.log(a); // [1, 2]
console.log(b); // 3
push 在數(shù)組末尾添加新元素

操作的原數(shù)組,返回?cái)?shù)組長(zhǎng)度

var a = [1, 2, 3];
var b = a.push(4, 5);

console.log(a); // [1, 2, 3, 4, 5]
console.log(b); // 5
隊(duì)列方法 shift 刪除數(shù)組的第一項(xiàng)

操作的原數(shù)組,返回刪除項(xiàng)

var a = [1, 2, 3];
var b = a.shift();

console.log(a); // [2, 3]
console.log(b); // 1
unshift 數(shù)組的前面添加新元素

操作的原數(shù)組,返回?cái)?shù)組長(zhǎng)度

var a = [1, 2, 3];
var b = a.unshift(4, 5);

console.log(a); // [4, 5, 1, 2, 3]
console.log(b); // 5
重排序方法 reverse 反轉(zhuǎn)數(shù)組項(xiàng)的順序

操作原數(shù)組,返回?cái)?shù)組

var a = ["one", "two", "three"];
var b= a.reverse();

console.log(a); // ["three", "two", "one"]
console.log(b); // ["three", "two", "one"]
sort 排序

按照 Unicode code 位置排序,默認(rèn)升序

var fruit = ["cherries", "apples", "bananas"];
fruit.sort(); // ["apples", "bananas", "cherries"]

var scores = [1, 10, 21, 2];
scores.sort(); // [1, 10, 2, 21]

// because "10" is mix of two characters "1" and "0" so "10" is before "2" in Unicode code point order.

之前寫(xiě)過(guò)一篇排序方法的深入解讀,感興趣請(qǐng)點(diǎn)擊這里

深入淺出 JavaScript 的 Array.prototype.sort 排序算法

操作方法 concat 合并數(shù)組

返回新數(shù)組

var arr1 = ["a", "b", "c"];
var arr2 = ["d", "e", "f"];

var arr3 = arr1.concat(arr2);

console.log(arr3);
// expected output: ["a", "b", "c", "d", "e", "f"]
slice 基于當(dāng)前數(shù)組創(chuàng)建新數(shù)組

返回新數(shù)組

傳入兩個(gè)參數(shù) 起始位置(包含) 結(jié)束位置(不包含),虎頭蛇尾,有始無(wú)終。

只傳一個(gè)參數(shù)默認(rèn)截取到數(shù)組末尾

傳遞的參數(shù)中有一個(gè)負(fù)數(shù),則用數(shù)組長(zhǎng)度加上該數(shù)來(lái)確定位置。長(zhǎng)度為 5 的數(shù)組 slice(-2,-1)slice(3, 4) 結(jié)果相同。

結(jié)束位置小于起始位置,則返回空數(shù)組

var a = ["1", "2", "3", "4"];
var sliced = a.slice(1, 3);

console.log(a);      // ["1", "2", "3", "4"]
console.log(sliced); // ["2", "3"]
splice

可以實(shí)現(xiàn) 刪除、插入(元素個(gè)數(shù)大于要?jiǎng)h除的元素個(gè)數(shù))、替換(刪除一個(gè),再添加一個(gè))

返回被刪除元素組成的數(shù)組,如果沒(méi)有被刪除元素,返回空數(shù)組

參數(shù): 起始位置(包含)、要?jiǎng)h除的元素個(gè)數(shù)、元素

var myFish = ["angel", "clown", "mandarin", "sturgeon"];

myFish.splice(2, 0, "drum");
// ["angel", "clown", "drum", "mandarin", "sturgeon"]

myFish.splice(2, 1);
// ["angel", "clown", "mandarin", "sturgeon"]

myFish.splice(-1, 0, "drum");
//["angel", "clown", "mandarin", "drum", "sturgeon"]
位置方法

indexOflastIndexOf 都接受兩個(gè)參數(shù):查找的值、查找起始位置

不存在,返回 -1 ;存在,返回位置。indexOf 是從前往后查找, lastIndexOf 是從后往前查找。

indexOf
var a = [2, 9, 9];
a.indexOf(2); // 0
a.indexOf(7); // -1

if (a.indexOf(7) === -1) {
  // element doesn"t exist in array
}
lastIndexOf
var numbers = [2, 5, 9, 2];
numbers.lastIndexOf(2);     // 3
numbers.lastIndexOf(7);     // -1
numbers.lastIndexOf(2, 3);  // 3
numbers.lastIndexOf(2, 2);  // 0
numbers.lastIndexOf(2, -2); // 0
numbers.lastIndexOf(2, -1); // 3
迭代方法

ECMAScript 5 提供了5個(gè)迭代方法,他們的參數(shù)都是

給定的函數(shù)(當(dāng)前元素、位置、數(shù)組)

可選的,執(zhí)行回調(diào)是的 this 值

every

對(duì)數(shù)組的每一項(xiàng)都運(yùn)行給定的函數(shù),每一項(xiàng)都返回 ture,則返回 true

function isBigEnough(element, index, array) {
  return element < 10;
}

[2, 5, 8, 3, 4].every(isBigEnough);   // true
some

對(duì)數(shù)組的每一項(xiàng)都運(yùn)行給定的函數(shù),任意一項(xiàng)都返回 ture,則返回 true

function isBiggerThan10(element, index, array) {
  return element > 10;
}

[2, 5, 8, 1, 4].some(isBiggerThan10);  // false
[12, 5, 8, 1, 4].some(isBiggerThan10); // true
filter

對(duì)數(shù)組的每一項(xiàng)都運(yùn)行給定的函數(shù),返回 結(jié)果為 ture 的項(xiàng)組成的數(shù)組

var words = ["spray", "limit", "elite", "exuberant", "destruction", "present", "happy"];

var longWords = words.filter(function(word){
  return word.length > 6;
});
// Filtered array longWords is ["exuberant", "destruction", "present"]
map

對(duì)數(shù)組的每一項(xiàng)都運(yùn)行給定的函數(shù),返回每次函數(shù)調(diào)用的結(jié)果組成一個(gè)新數(shù)組

var numbers = [1, 5, 10, 15];
var doubles = numbers.map(function(x) {
   return x * 2;
});
// doubles is now [2, 10, 20, 30]
// numbers is still [1, 5, 10, 15]
forEach 數(shù)組遍歷
const items = ["item1", "item2", "item3"];
const copy = [];

items.forEach(function(item){
  copy.push(item)
});
縮小方法

reduce、reduceRight 一個(gè)是從前往后遍歷,一個(gè)是從后往前遍歷,比上面的五個(gè)迭代方法回調(diào)函數(shù)多了一個(gè)參數(shù):上一項(xiàng)的值

回調(diào)函數(shù)參數(shù) 上一項(xiàng)、當(dāng)前元素、位置、數(shù)組

reduce
var numbers = [0, 1, 2, 3];

var result = numbers.reduce(function(accumulator, currentValue) {
    return accumulator + currentValue;
});

console.log(result);
// expected output: 6
reduceRight
var flattened = [[0, 1], [2, 3], [4, 5]].reduceRight(function(a, b) {
    return a.concat(b);
}, []);

// flattened is [4, 5, 2, 3, 0, 1]
小總結(jié)

隊(duì)列方法和棧方法操作的都是原數(shù)組,增加數(shù)組元素的時(shí)候,返回值是數(shù)組長(zhǎng)度;刪除數(shù)組元素的時(shí)候,返回值是被刪除的元素。

哪些方法改變了原數(shù)組?

棧方法:push、pop

隊(duì)列方法:shift、unshift

重排序方法:reverse、sort

哪些方法返回的是數(shù)組?

重排序方法:reverse、sort

操作方法:splice、slice、concat

迭代方法中:filter、map

ECMAScript 6.0 新增的方法

ECMA-262/6.0 規(guī)范

from

將類似數(shù)組的對(duì)象(array-like object)和可遍歷(iterable)的對(duì)象轉(zhuǎn)為真正的數(shù)組

const bar = ["a", "b", "c"];
Array.from(bar);
// ["a", "b", "c"]

Array.from("foo");
// ["f", "o", "o"]
of

用于將一組值,轉(zhuǎn)換為數(shù)組

這個(gè)方法的主要目的,是彌補(bǔ)數(shù)組構(gòu)造函數(shù) Array() 的不足。因?yàn)閰?shù)個(gè)數(shù)的不同,會(huì)導(dǎo)致 Array() 的行為有差異。

Array() // []
Array(3) // [, , ,]
Array(3, 11, 8) // [3, 11, 8]
Array.of(7);       // [7]
Array.of(1, 2, 3); // [1, 2, 3]

Array(7);          // [ , , , , , , ]
Array(1, 2, 3);    // [1, 2, 3]
copyWithin

將指定位置的元素復(fù)制到其他位置(會(huì)覆蓋原有元素),返回當(dāng)前數(shù)組。該方法會(huì)修改當(dāng)前數(shù)組。

它接受三個(gè)參數(shù)。

target(必需):從該位置開(kāi)始替換數(shù)據(jù)。

start(可選):從該位置開(kāi)始讀取數(shù)據(jù),默認(rèn)為0。如果為負(fù)值,表示倒數(shù)。

end(可選):到該位置前停止讀取數(shù)據(jù),默認(rèn)等于數(shù)組長(zhǎng)度。如果為負(fù)值,表示倒數(shù)。

[1, 2, 3, 4, 5].copyWithin(-2);
// [1, 2, 3, 1, 2]

[1, 2, 3, 4, 5].copyWithin(0, 3);
// [4, 5, 3, 4, 5]

[1, 2, 3, 4, 5].copyWithin(0, 3, 4);
// [4, 2, 3, 4, 5]

[1, 2, 3, 4, 5].copyWithin(-2, -3, -1);
// [1, 2, 3, 3, 4]
fill

使用給定值,填充一個(gè)數(shù)組。

會(huì)抹除數(shù)組原有的元素

還可以接受第二個(gè)和第三個(gè)參數(shù),用于指定填充的起始位置和結(jié)束位置。

var numbers = [1, 2, 3]
numbers.fill(1);
// results in [1, 1, 1]

["a", "b", "c"].fill(7, 1, 2)
// ["a", 7, "c"]
find

找出第一個(gè)符合條件的數(shù)組元素,參數(shù)是一個(gè)回調(diào)函數(shù),所有數(shù)組元素依次執(zhí)行該回調(diào)函數(shù),直到找出第一個(gè)返回值為 true 的元素,然后返回該元素。如果沒(méi)有符合條件的元素,則返回 undefined?;卣{(diào)函數(shù)可以接受三個(gè)參數(shù),依次為當(dāng)前的值、當(dāng)前的位置和原數(shù)組。

[1, 5, 10, 15].find(function(value, index, arr) {
  return value > 9;
}) // 10

[1, 5, 2, 3].find(function(value, index, arr) {
  return value > 9;
}) // undefined
findIndex

findIndex 方法的用法與 find 方法非常類似,返回第一個(gè)符合條件的數(shù)組元素的位置,如果所有元素都不符合條件,則返回 -1。

[1, 5, 10, 15].findIndex(function(value, index, arr) {
  return value > 9;
}) // 2

ES6 提供三個(gè)新的方法—— entries(),keys()和 values() —— 用于遍歷數(shù)組。它們都返回一個(gè)遍歷器對(duì)象,可以用 for...of 循環(huán)進(jìn)行遍歷,唯一的區(qū)別是 keys() 是對(duì)鍵名的遍歷、values() 是對(duì)鍵值的遍歷,entries() 是對(duì)鍵值對(duì)的遍歷。

for (let index of ["a", "b"].keys()) {
  console.log(index);
}
// 0
// 1

for (let elem of ["a", "b"].values()) {
  console.log(elem);
}
// "a"
// "b"

for (let [index, elem] of ["a", "b"].entries()) {
  console.log(index, elem);
}
// 0 "a"
// 1 "b"
entries
var a = ["a", "b", "c"];
var iterator = a.entries();

console.log(iterator.next().value); // [0, "a"]
console.log(iterator.next().value); // [1, "b"]
console.log(iterator.next().value); // [2, "c"]
keys
var arr = ["a", "b", "c"];
var iterator = arr.keys();

console.log(iterator.next()); // { value: 0, done: false }
console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: undefined, done: true }
values
var a = ["w", "y", "k", "o", "p"];
var iterator = a.values();

console.log(iterator.next().value); // w
console.log(iterator.next().value); // y
console.log(iterator.next().value); // k
console.log(iterator.next().value); // o
console.log(iterator.next().value); // p

更多使用方式,可以參考 阮一峰 ECMAScript 6入門(mén)

ECMAScript 7.0 新增的方法

ECMA-262/7.0 規(guī)范

includes

判斷數(shù)組中是否存在該元素

參數(shù):查找的值、起始位置

可以替換 ES5 時(shí)代的 indexOf 判斷方式

indexOf 判斷元素是否為 NaN,會(huì)判斷錯(cuò)誤

var a = [1, 2, 3];
a.includes(2); // true
a.includes(4); // false

ECMA-262/8.0 規(guī)范

ES8 沒(méi)增加數(shù)組方法

參考

JavaScript 高級(jí)程序設(shè)計(jì)

MDN web docs

阮一峰 ECMAScript 6入門(mén)

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/89570.html

相關(guān)文章

  • Javascript內(nèi)置對(duì)象新增接口列表

    網(wǎng)上很少有提供不同版本接口對(duì)比的文章,所以自己總結(jié)一下。 Array Method Description Modify Version concat 連接多個(gè)數(shù)組,返回?cái)?shù)組副本,參數(shù)可以為值或數(shù)組 否 ES3 join 把數(shù)組元素組合為字符串 否 ES3 pop 刪除并返回最后一個(gè)元素 是 ES3 push 向數(shù)組末尾添加一個(gè)或多個(gè)值,返回?cái)?shù)組長(zhǎng)度 是 ES3 reve...

    xuhong 評(píng)論0 收藏0
  • JavaScript 對(duì)象所有API解析

    摘要:創(chuàng)建對(duì)象的兩種方式推薦該構(gòu)造器可以接受任何類型的參數(shù),并且會(huì)自動(dòng)識(shí)別參數(shù)的類型,并選擇更合適的構(gòu)造器來(lái)完成相關(guān)操作。比如二的成員該屬性指向用來(lái)構(gòu)造該函數(shù)對(duì)象的構(gòu)造器,在這里為該方法返回的是一個(gè)用于描述目標(biāo)對(duì)象的字符串。 之前看到【深度長(zhǎng)文】JavaScript數(shù)組所有API全解密和JavaScript字符串所有API全解密這兩篇高質(zhì)量的文章。發(fā)現(xiàn)沒(méi)寫(xiě)對(duì)象API解析(估計(jì)是博主覺(jué)得簡(jiǎn)單,...

    SmallBoyO 評(píng)論0 收藏0
  • 細(xì)解JavaScript ES7 ES8 ES9 新特性

    摘要:定期召開(kāi)會(huì)議,會(huì)議由會(huì)員公司的代表與特邀專家出席。新版本將會(huì)包含每年截止時(shí)間之前完成的所有特性。它引入了一個(gè)新的構(gòu)造函數(shù)和具有輔助函數(shù)的命名空間對(duì)象。 導(dǎo)言:ECMAScript的演化不會(huì)停止,但是我們完全沒(méi)必要害怕。除了ES6這個(gè)史無(wú)前例的版本帶來(lái)了海量的信息和知識(shí)點(diǎn)以外,之后每年一發(fā)的版本都僅僅帶有少量的增量更新,一年更新的東西花半個(gè)小時(shí)就能搞懂了,完全沒(méi)必要畏懼。本文將帶您花大約...

    Youngs 評(píng)論0 收藏0
  • ES8 走馬觀花(ECMAScript2017 新特性)

    摘要:距離上一篇走馬觀花已經(jīng)快兩年時(shí)間了,上個(gè)月底正式發(fā)布,再寫(xiě)一篇姊妹篇,介紹新特性。會(huì)議的每一項(xiàng)決議必須大部分人贊同,并且沒(méi)有人強(qiáng)烈反對(duì)才可以通過(guò)。已經(jīng)準(zhǔn)備就緒,該特性會(huì)出現(xiàn)在年度發(fā)布的規(guī)范之中。 距離上一篇《ES6 走馬觀花》已經(jīng)快兩年時(shí)間了,上個(gè)月底 ES8 正式發(fā)布,再寫(xiě)一篇姊妹篇,介紹 ES8 新特性。 什么是 ES8 ES8 是 ECMA-262 標(biāo)準(zhǔn)第 8 版的簡(jiǎn)稱,從 ES...

    meislzhua 評(píng)論0 收藏0
  • ES8初探

    ES8 在es8中主要有6個(gè)特性:主要的有: Shared memory and atomics (共享內(nèi)存和原子) Async Functions(異步函數(shù)) 其他的特性: Object.values/Object.entries (配合Object.keys使用) String padding (字符串填充) Object.getOwnPropertyDescriptors() Trai...

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

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

0條評(píng)論

閱讀需要支付1元查看
<