国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Array對象

zorpan / 1732人閱讀

摘要:對象構造函數(shù)是的原生對象,同時也是一個構造函數(shù),可以用它生成新的數(shù)組。典型的偽數(shù)組有函數(shù)的對象,以及大多數(shù)元素集,還有字符串。,返回一個布爾值,表示判斷數(shù)組成員是否符合某種條件。二是,它內(nèi)部使用嚴格相等運算符進行判斷,這會導致對的誤判。

Array對象 構造函數(shù)

Array是 JavaScript 的原生對象,同時也是一個構造函數(shù),可以用它生成新的數(shù)組。

如果沒有使用new,運行結果也是一樣的。

var arr = new Array(2);
// 等同于var arr = Array(2);

Array構造函數(shù)有一個很大的缺陷,就是不同的參數(shù),會導致它的行為不一致。

// 無參數(shù)時,返回一個空數(shù)組
new Array() // []

// 單個正整數(shù)參數(shù),表示返回的新數(shù)組的長度
new Array(1) // [ empty ]
new Array(2) // [ empty x 2 ]

// 非正整數(shù)的數(shù)值作為參數(shù),會報錯
new Array(3.2) // RangeError: Invalid array length
new Array(-3) // RangeError: Invalid array length

// 單個非數(shù)值(比如字符串、布爾值、對象等)作為參數(shù),
// 則該參數(shù)是返回的新數(shù)組的成員
new Array("abc") // ["abc"]
new Array([1]) // [Array[1]]

// 多參數(shù)時,所有參數(shù)都是返回的新數(shù)組的成員
new Array(1, 2) // [1, 2]
new Array("a", "b", "c") // ["a", "b", "c"]

可以看到,Array作為構造函數(shù),行為很不一致。因此,不建議使用它生成新數(shù)組,直接使用數(shù)組字面量是更好的做法。

// bad
var arr = new Array(1, 2);

// good
var arr = [1, 2];

注:ES6 引入了Array.of( )方法來解決這個問題。該方法的作用非常類似Array構造器,但在使用單個數(shù)值參數(shù)的時候并不會導致特殊結果。Array.of( )方法總會創(chuàng)建一個包含所有傳入?yún)?shù)的數(shù)組,而不管參數(shù)的數(shù)量與類型:

let items = Array.of(1, 2);
console.log(items.length); // 2
console.log(items[0]); // 1
console.log(items[1]); // 2
items = Array.of(2);
console.log(items.length); // 1
console.log(items[0]); // 2

Array.of基本上可以用來替代Array()或newArray(),并且不存在由于參數(shù)不同而導致的重載,而且他們的行為非常統(tǒng)一。

靜態(tài)方法 Array.isArray()

Array.isArray方法返回一個布爾值,表示參數(shù)是否為數(shù)組。它可以彌補typeof運算符的不足。

var arr = [1, 2, 3];

typeof arr // "object"
Array.isArray(arr) // true`
Array.from()

ES6特性,將偽數(shù)組對象或可遍歷對象轉換為真數(shù)組。如果一個對象的所有鍵名都是正整數(shù)或零,并且有l(wèi)ength屬性,那么這個對象就很像數(shù)組,稱為偽數(shù)組。典型的偽數(shù)組有函數(shù)的arguments對象,以及大多數(shù) DOM 元素集,還有字符串。
109ca7cacdfef8b8bc90681a7e3d0343.png

Array.of()

ES6特性,
4f43e3c9c023167ba4928bcb33c3a535.png

實例方法 valueOf(),toString()

valueOf方法是一個所有對象都擁有的方法,表示對該對象求值。不同對象的valueOf方法不盡一致,數(shù)組的valueOf方法返回數(shù)組本身。

var arr = [1, 2, 3];
arr.valueOf() // [1, 2, 3]

toString方法也是對象的通用方法,數(shù)組的toString方法返回數(shù)組的字符串形式。

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

var arr = [1, 2, 3, [4, 5, 6]];
arr.toString() // "1,2,3,4,5,6"
push()、pop()

push、pop均是在數(shù)組末尾進行增刪元素,都會改變原數(shù)組。push方法用于在數(shù)組的末端添加一個或多個元素,并返回添加新元素后的數(shù)組長度。pop方法用于刪除數(shù)組的最后一個元素,并返回該元素。

var arr = [];

arr.push(1) // 1
arr.push("a") // 2
arr.push(true, {}) // 4
arr // [1, "a", true, {}]


var arr = ["a", "b", "c"];

arr.pop() // "c"
arr // ["a", "b"]

push和pop結合使用,就構成了“后進先出”的棧結構(stack)。

shift()、unshift()

shift、unshift均是在數(shù)組頭進行增刪元素,都會改變原數(shù)組。shift()方法用于刪除數(shù)組的第一個元素,并返回該元素。unshift()方法用于在數(shù)組的第一個位置添加元素,并返回添加新元素后的數(shù)組長度。

var a = ["a", "b", "c"];

a.shift() // "a"
a // ["b", "c"]


var a = ["a", "b", "c"];

a.unshift("x"); // 4
a // ["x", "a", "b", "c"]

push()和shift()結合使用,就構成了“先進先出”的隊列結構(queue)。

join()

join()方法以指定參數(shù)作為分隔符,將所有數(shù)組成員連接為一個字符串返回。如果不提供參數(shù),默認用逗號分隔。

var a = [1, 2, 3, 4];

a.join(" ") // "1 2 3 4"
a.join(" | ") // "1 | 2 | 3 | 4"
a.join() // "1,2,3,4"
concat()

concat方法用于多個數(shù)組的合并。它將新數(shù)組的成員,添加到原數(shù)組成員的后部,然后返回一個新數(shù)組,原數(shù)組不變。

["hello"].concat(["world"])
// ["hello", "world"]

["hello"].concat(["world"], ["!"])
// ["hello", "world", "!"]

[].concat({a: 1}, {b: 2})
// [{ a: 1 }, { b: 2 }]

[2].concat({a: 1})
// [2, {a: 1}]

[1, 2, 3].concat(4, 5, 6)
// [1, 2, 3, 4, 5, 6]
reverse()

reverse方法用于顛倒排列數(shù)組元素,返回改變后的數(shù)組。注意,該方法將改變原數(shù)組。

var a = ["a", "b", "c"];

a.reverse() // ["c", "b", "a"]
a // ["c", "b", "a"]
slice()、splice()

slice方法用于提取目標數(shù)組的一部分,返回一個新數(shù)組,原數(shù)組不變。

arr.slice(start, end);

它的第一個參數(shù)為起始位置(從0開始),第二個參數(shù)為終止位置(但該位置的元素本身不包括在內(nèi))。如果省略第二個參數(shù),則一直返回到原數(shù)組的最后一個成員。如果slice方法的參數(shù)是負數(shù),則表示倒數(shù)計算的位置。

var a = ["a", "b", "c"];

a.slice(0) // ["a", "b", "c"]
a.slice(1) // ["b", "c"]
a.slice(1, 2) // ["b"]
a.slice(2, 6) // ["c"]
a.slice() // ["a", "b", "c"]


var a = ["a", "b", "c"];
a.slice(-2) // ["b", "c"]
a.slice(-2, -1) // ["b"]

splice方法用于刪除原數(shù)組的一部分成員,并可以在刪除的位置添加新的數(shù)組成員,返回值是被刪除的元素。注意,該方法會改變原數(shù)組。
arr.splice(start, count, addElement1, addElement2, ...);

splice的第一個參數(shù)是刪除的起始位置(從0開始),第二個參數(shù)是被刪除的元素個數(shù)。如果后面還有更多的參數(shù),則表示這些就是要被插入數(shù)組的新元素。起始位置如果是負數(shù),就表示從倒數(shù)位置開始刪除。如果只是單純地插入元素,splice方法的第二個參數(shù)可以設為0。如果只提供第一個參數(shù),等同于將原數(shù)組在指定位置拆分成兩個數(shù)組。

var a = ["a", "b", "c", "d", "e", "f"];
a.splice(4, 2) // ["e", "f"]
a // ["a", "b", "c", "d"]


var a = ["a", "b", "c", "d", "e", "f"];
a.splice(4, 2, 1, 2) // ["e", "f"]
a // ["a", "b", "c", "d", 1, 2]


var a = ["a", "b", "c", "d", "e", "f"];
a.splice(-4, 2) // ["c", "d"]


var a = [1, 1, 1];

a.splice(1, 0, 2) // []
a // [1, 2, 1, 1]


var a = [1, 2, 3, 4];
a.splice(2) // [3, 4]
a // [1, 2]
sort()

sort方法對數(shù)組成員進行排序,默認是按照字典順序排序。排序后,原數(shù)組將被改變。

["d", "c", "b", "a"].sort()
// ["a", "b", "c", "d"]

[4, 3, 2, 1].sort()
// [1, 2, 3, 4]

[11, 101].sort()
// [101, 11]

[10111, 1101, 111].sort()

數(shù)值會被先轉成字符串,再按照字典順序進行比較,所以101排在11的前面。

如果想讓sort方法按照自定義方式排序,可以傳入一個函數(shù)作為參數(shù)。

[10111, 1101, 111].sort(function (a, b) {
  return a - b;
})
// [111, 1101, 10111]


[
  { name: "張三", age: 30 },
  { name: "李四", age: 24 },
  { name: "王五", age: 28  }
].sort(function (o1, o2) {
  return o1.age - o2.age;
})
// [
//   { name: "李四", age: 24 },
//   { name: "王五", age: 28  },
//   { name: "張三", age: 30 }
// ]
map()、forEach()

map方法和forEach方法很相似,也是對數(shù)組的所有成員依次執(zhí)行參數(shù)函數(shù)。map方法將數(shù)組的所有成員依次傳入?yún)?shù)函數(shù),然后把每一次的執(zhí)行結果組成一個新數(shù)組返回。forEach方法不返回值,只用來操作數(shù)據(jù)。這就是說,如果數(shù)組遍歷的目的是為了得到返回值,那么使用map方法,否則使用forEach方法。

map、forEach方法接受一個函數(shù)作為參數(shù)。該函數(shù)調(diào)用時,map方法向它傳入三個參數(shù):當前成員、當前位置和數(shù)組本身。

[1, 2, 3].map(function(elem, index, arr) {
  return elem * index;
});
// [0, 2, 6]


function log(element, index, array) {
  console.log("[" + index + "] = " + element);
}

[2, 5, 9].forEach(log);
// [0] = 2
// [1] = 5
// [2] = 9

上面代碼中,map、forEach方法的回調(diào)函數(shù)有三個參數(shù),elem為當前成員的值,index為當前成員的位置,arr為原數(shù)組([1, 2, 3])。map方法還可以接受第二個參數(shù),用來綁定回調(diào)函數(shù)內(nèi)部的this變量。

var arr = ["a", "b", "c"];

[1, 2].map(function (e) {
  return this[e];
}, arr)
// ["b", "c"]


var out = [];

[1, 2, 3].forEach(function(elem) {
  this.push(elem * elem);
}, out);

out // [1, 4, 9]

map、forEach方法不會跳過undefined和null,但是會跳過空位。
注:forEach方法無法中斷執(zhí)行,總是會將所有成員遍歷完。如果希望符合某種條件時,就中斷遍歷,要使用for循環(huán)。

var arr = [1, 2, 3];

for (var i = 0; i < arr.length; i++) {
  if (arr[i] === 2) break;
  console.log(arr[i]);
}
// 1
fliter

filter方法用于過濾數(shù)組成員,滿足條件的成員組成一個新數(shù)組返回。它的參數(shù)是一個函數(shù),所有數(shù)組成員依次執(zhí)行該函數(shù),返回結果為true的成員組成一個新數(shù)組返回。該方法不會改變原數(shù)組。

[1, 2, 3, 4, 5].filter(function (elem, index, arr) {
  return index % 2 === 0;
});
// [1, 3, 5]

filter方法還可以接受第二個參數(shù),用來綁定參數(shù)函數(shù)內(nèi)部的this變量。

some(),every()

返回一個布爾值,表示判斷數(shù)組成員是否符合某種條件。它們接受一個函數(shù)作為參數(shù),所有數(shù)組成員依次執(zhí)行該函數(shù)。該函數(shù)接受三個參數(shù):當前成員、當前位置和整個數(shù)組,然后返回一個布爾值。some方法是只要一個成員的返回值是true,則整個some方法的返回值就是true,否則返回false。

every方法是所有成員的返回值都是true,整個every方法才返回true,否則返回false。

var arr = [1, 2, 3, 4, 5];
arr.every(function (elem, index, arr) {
  return elem >= 3;
});
// false

some和every方法還可以接受第二個參數(shù),用來綁定參數(shù)函數(shù)內(nèi)部的this變量。

indexOf(),lastIndexOf()

indexOf方法返回給定元素在數(shù)組中第一次出現(xiàn)的位置,如果沒有出現(xiàn)則返回-1。indexOf方法還可以接受第二個參數(shù),表示搜索的開始位置。

var a = ["a", "b", "c"];

a.indexOf("b") // 1
a.indexOf("y") // -1

["a", "b", "c"].indexOf("a", 1) // -1

lastIndexOf方法返回給定元素在數(shù)組中最后一次出現(xiàn)的位置

var a = [2, 5, 9, 2];
a.lastIndexOf(2) // 3
a.lastIndexOf(7) // -1
find() 和 findIndex()

二者皆是ES6新特性,數(shù)組實例的find方法,用于找出第一個符合條件的數(shù)組成員。它的參數(shù)是一個回調(diào)函數(shù),所有數(shù)組成員依次執(zhí)行該回調(diào)函數(shù),直到找出第一個返回值為true的成員,然后返回該成員。如果沒有符合條件的成員,則返回undefined。

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

[1, 4, -5, 10].find((n) => n < 0) // -5


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

ES6新特性,Array.prototype.includes方法返回一個布爾值,表示某個數(shù)組是否包含給定的值。該方法的第二個參數(shù)表示搜索的起始位置,默認為0。如果第二個參數(shù)為負數(shù),則表示倒數(shù)的位置,如果這時它大于數(shù)組長度(比如第二個參數(shù)為-4,但數(shù)組長度為3),則會重置為從0開始。

[1, 2, 3].includes(2)   // true
[1, 2, 3].includes(3, -1); // true
[1, 2, 3, 5, 1].includes(1, 2); // true

沒有該方法之前,我們通常使用數(shù)組的indexOf方法,檢查是否包含某個值。indexOf方法有兩個缺點,一是不夠語義化,它的含義是找到參數(shù)值的第一個出現(xiàn)位置,所以要去比較是否不等于-1,表達起來不夠直觀。二是,它內(nèi)部使用嚴格相等運算符(===)進行判斷,這會導致對NaN的誤判。

[NaN].indexOf(NaN) // -1
[NaN].includes(NaN) // true
reduce(),reduceRight()

reduce方法和reduceRight方法依次處理數(shù)組的每個成員,最終累計為一個值。它們的差別是,reduce是從左到右處理(從第一個成員到最后一個成員),reduceRight則是從右到左(從最后一個成員到第一個成員),其他完全一樣。

[1, 2, 3, 4, 5].reduce(function (a, b) {
  console.log(a, b);
  return a + b;
})
// 1 2
// 3 3
// 6 4
// 10 5
//最后結果:15

f1af205ad410dda05d122e5b06ca5ecc.png

數(shù)組實例的 entries(),keys() 和 values()

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

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"
總結

push、pop、shift、unshift、reverse、splice、sort會改變原數(shù)據(jù),其余不會;

常見工具方法 字符串、類數(shù)組對象拼接
Array.prototype.join.call("hello", "-")
// "h-e-l-l-o"

var obj = { 0: "a", 1: "b", length: 2 };
Array.prototype.join.call(obj, "-")
// "a-b"
類數(shù)組對象轉為數(shù)組
Array.prototype.slice.call({ 0: "a", 1: "b", length: 2 })
// ["a", "b"]

Array.prototype.slice.call(document.querySelectorAll("div"));
Array.prototype.slice.call(arguments);
找出字符長度最長的數(shù)組成員
function findLongest(entries) {
  return entries.reduce(function (longest, entry) {
    return entry.length > longest.length ? entry : longest;
  }, "");
}

findLongest(["aaa", "bb", "c"]) // "aaa"

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

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/101072.html

相關文章

  • ES6數(shù)組 - 新增的創(chuàng)建數(shù)組的方法

    摘要:它主要用在以類數(shù)組對象和可迭代對象為藍本,創(chuàng)建對應的數(shù)組。類數(shù)組對象我們最熟悉的類數(shù)組對象,應該就是的對象了。 在ES6之前,創(chuàng)建數(shù)組的方式有2種:一: 通過數(shù)組字面量 let array = [1,2,3]; console.log(array);//[1,2,3] 二: 通過new Array()創(chuàng)建數(shù)組 let array = new Array(1, 2, 3); conso...

    e10101 評論0 收藏0
  • Array 對象方法整理

    摘要:對象方法數(shù)組創(chuàng)建與修改創(chuàng)建創(chuàng)建一個新數(shù)組實例將類數(shù)組類似數(shù)組的對象和可遍歷的對象轉為真正的數(shù)組。返回一個新的對象,該對象包含數(shù)組每個索引的值。遍歷鍵遍歷值遍歷鍵值對參考文檔標準庫對象 Array 對象方法 數(shù)組創(chuàng)建與修改 1. 創(chuàng)建 var arr = []; var arr = new Array() Array.of(el1[,el2[...]]) //創(chuàng)建一個新數(shù)組實例 Ar...

    IntMain 評論0 收藏0
  • JavaScript數(shù)組學習記錄_11

    摘要:數(shù)組學習記錄是的實例屬性。對數(shù)組元素進行排序,并返回當前數(shù)組。返回一個由所有數(shù)組元素組合而成的字符串。為數(shù)組中的每個元素執(zhí)行一次回調(diào)函數(shù)。返回一個數(shù)組迭代器對象,該迭代器會包含所有數(shù)組元素的鍵值對。 JavaScript數(shù)組學習記錄 Array.length Array.length 是Array的實例屬性。返回或設置一個數(shù)組中的元素個數(shù)。該值是一個無符號 32-bit 整數(shù),并且總是...

    TalkingData 評論0 收藏0
  • 【深度長文】JavaScript數(shù)組所有API全解密

    摘要:關于我的博客掘金專欄路易斯專欄原文鏈接深度長文數(shù)組全解密全文共字,系統(tǒng)講解了數(shù)組的各種特性和。構造器構造器用于創(chuàng)建一個新的數(shù)組。中聲明的數(shù)組,它的構造函數(shù)是中的對象。 本文首發(fā)于CSDN網(wǎng)站,下面的版本又經(jīng)過進一步的修訂。 關于 我的博客:louis blog 掘金專欄:路易斯專欄 原文鏈接:【深度長文】JavaScript數(shù)組全解密 全文共13k+字,系統(tǒng)講解了JavaScrip...

    Mr_zhang 評論0 收藏0
  • 簡單總結一下JS的Array對象

    摘要:簡單總結一下的對象屬性數(shù)組指定創(chuàng)建一個數(shù)組的函數(shù)。方法數(shù)組返回一個迭代器,它返回數(shù)組的鍵值對。方法數(shù)組返回滿足回調(diào)函數(shù)中指定的測試條件的第一個數(shù)組元素的索引值。該回調(diào)函數(shù)的返回值為累積結果,并且此返回值在下一次調(diào)用該回調(diào)函數(shù)時作為參數(shù)提供。 簡單總結一下JS的Array對象 constructor 屬性(數(shù)組) 指定創(chuàng)建一個數(shù)組的函數(shù)。該屬性可用于判斷某個對象是否為數(shù)組與arr ins...

    malakashi 評論0 收藏0
  • 記一次遞歸在我項目中所發(fā)揮的作用

    作者:陳大魚頭 github: KRISACHAN 背景 在最近的項目中,有這么一個功能點,就是要獲取在WEB IDE里用戶所寫的注釋中的一段特殊規(guī)則,然后解析成一段JS config 對象 例如: //% width=100px height=200px //% pos.top=50px pos.left=50px //% writable=true //% q.b.d.w.r.f=30...

    n7then 評論0 收藏0

發(fā)表評論

0條評論

zorpan

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<