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

資訊專欄INFORMATION COLUMN

Array對象

loostudy / 1522人閱讀

摘要:上面代碼通過方法的第二個參數(shù),將回調(diào)函數(shù)內(nèi)部的對象,指向數(shù)組。第三次執(zhí)行,為上一輪的返回值,為第四個成員。第四次執(zhí)行,為上一輪返回值,為第五個成員。

Array 對象

構(gòu)造函數(shù)
靜態(tài)方法
Array.isArray()
實例方法
valueOf(),toString()
push(),pop()
shift(),unshift()
join(分隔符)返回字符串
concat()新的
reverse()
slice(頭尾)新的
splice(頭,長,增)增(頭,0,增)拆成兩個(頭)返回刪除的
sort()
map()新的 this
forEach()不返回 this
filter()新的 返回ture的
some(),every()新的 返turee false
reduce(),reduceRight()新的
indexOf(),lastIndexOf()新的

鏈?zhǔn)绞褂?/p>

1.構(gòu)造函數(shù)
Array構(gòu)造函數(shù)有一個很大的缺陷,就是不同的參數(shù),會導(dǎo)致它的行為不一致。

// 無參數(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"]

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

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

var a = new Array(3);
var b = [undefined, undefined, undefined];

a.length // 3
b.length // 3

a[0] // undefined
b[0] // undefined

0 in a // false
0 in b // true

2.靜態(tài)方法
Array.isArray()
var arr = [1, 2, 3];

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

3.實例方法
3.1valueOf()原數(shù)組,toString()字符串
3.2push(),pop() 改
3.3shift(),unshift()改
shift()方法可以遍歷并清空一個數(shù)組。

var list = [1, 2, 3, 4];
var item;

while (item = list.shift()) {
console.log(item);
}

list // []
上面代碼通過list.shift()方法每次取出一個元素,從而遍歷數(shù)組。它的前提是數(shù)組元素不能是0或任何布爾值等于false的元素,因此這樣的遍歷不是很可靠

3.4join(分隔符)字符串
如果數(shù)組成員是undefined或null或空位,會被轉(zhuǎn)成空字符串。

[undefined, null].join("#")
// "#"

["a",, "b"].join("-")
// "a--b"
通過call方法,這個方法也可以用于字符串或類似數(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"

3.5concat()新
concat方法返回當(dāng)前數(shù)組的一個淺拷貝。所謂“淺拷貝”,指的是新數(shù)組拷貝的是對象的引用。

var obj = { a: 1 };
var oldArray = [obj];

var newArray = oldArray.concat();

obj.a = 2;
newArray[0].a // 2
上面代碼中,原數(shù)組包含一個對象,concat方法生成的新數(shù)組包含這個對象的引用。所以,改變原對象以后,新數(shù)組跟著改變

3.6reverse()改
3.7slice(頭,尾)新
slice方法的一個重要應(yīng)用,是將類似數(shù)組的對象轉(zhuǎn)為真正的數(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);

3.8splice(頭,長,增) 只插入(頭,0,增)
起始位置如果是負(fù)數(shù),就表示從倒數(shù)位置開始刪除。

var a = ["a", "b", "c", "d", "e", "f"];
a.splice(-4, 2) // ["c", "d"]
上面代碼表示,從倒數(shù)第四個位置c開始刪除兩個成員。

如果只是單純地插入元素,splice方法的第二個參數(shù)可以設(shè)為0。

var a = [1, 1, 1];

a.splice(1, 0, 2) // []
a // [1, 2, 1, 1]
如果只提供第一個參數(shù),等同于將原數(shù)組在指定位置拆分成兩個數(shù)組。

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

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

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

[10111, 1101, 111].sort(function (a, b) {
return a - b;
})
// [111, 1101, 10111]
上面代碼中,sort的參數(shù)函數(shù)本身接受兩個參數(shù),表示進(jìn)行比較的兩個數(shù)組成員。如果該函數(shù)的返回值大于0,表示第一個成員排在第二個成員后面;其他情況下,都是第一個元素排在第二個元素前面。

[
{ 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 }
// ]

3.10map()新
[1, 2, 3].map(function(elem, index, arr) {
return elem * index;
});
// [0, 2, 6]
上面代碼中,map方法的回調(diào)函數(shù)有三個參數(shù),elem為當(dāng)前成員的值,index為當(dāng)前成員的位置,arr為原數(shù)組([1, 2, 3])。

map方法還可以接受第二個參數(shù),用來綁定回調(diào)函數(shù)內(nèi)部的this變量(詳見《this 變量》一章)。

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

[1, 2].map(function (e) {
return this[e];
}, arr)
// ["b", "c"]
上面代碼通過map方法的第二個參數(shù),將回調(diào)函數(shù)內(nèi)部的this對象,指向arr數(shù)組。

如果數(shù)組有空位,map方法的回調(diào)函數(shù)在這個位置不會執(zhí)行,會跳過數(shù)組的空位。

var f = function (n) { return "a" };

[1, undefined, 2].map(f) // ["a", "a", "a"]
[1, null, 2].map(f) // ["a", "a", "a"]
[1, , 2].map(f) // ["a", , "a"]
上面代碼中,map方法不會跳過undefined和null,但是會跳過空位。

3.11forEach()
forEach方法不返回值,只用來操作數(shù)據(jù)。這就是說,如果數(shù)組遍歷的目的是為了得到返回值,那么使用map方法,否則使用forEach方法

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

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

forEach方法也可以接受第二個參數(shù),綁定參數(shù)函數(shù)的this變量。

var out = [];

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

out // [1, 4, 9]
上面代碼中,空數(shù)組out是forEach方法的第二個參數(shù),結(jié)果,回調(diào)函數(shù)內(nèi)部的this關(guān)鍵字就指向out。

forEach方法也會跳過數(shù)組的空位。

var log = function (n) {
console.log(n + 1);
};

[1, undefined, 2].forEach(log)
// 2
// NaN
// 3

[1, null, 2].forEach(log)
// 2
// 1
// 3

[1, , 2].forEach(log)
// 2
// 3

3.12filter()
[1, 2, 3, 4, 5].filter(function (elem) {
return (elem > 3);
})
// [4, 5]
上面代碼將大于3的數(shù)組成員,作為一個新數(shù)組返回。

var arr = [0, 1, "a", false];

arr.filter(Boolean)
// [1, "a"]
上面代碼中,filter方法返回數(shù)組arr里面所有布爾值為true的成員

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

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

var obj = { MAX: 3 };
var myFilter = function (item) {
if (item > this.MAX) return true;
};

var arr = [2, 8, 3, 4, 1, 3, 2, 9];
arr.filter(myFilter, obj) // [8, 4, 9
3.13some(),every()
判斷數(shù)組成員是否符合某種條件
some方法是只要一個成員的返回值是true,則整個some方法的返回值就是true,否則返回false
var arr = [1, 2, 3, 4, 5];
arr.some(function (elem, index, arr) {
return elem >= 3;
});
// true
上面代碼中,如果數(shù)組arr有一個成員大于等于3,some方法就返回true。

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

var arr = [1, 2, 3, 4, 5];
arr.every(function (elem, index, arr) {
return elem >= 3;
});
// false
上面代碼中,數(shù)組arr并非所有成員大于等于3,所以返回false。

注意,對于空數(shù)組,some方法返回false,every方法返回true,回調(diào)函數(shù)都不會執(zhí)行。

function isEven(x) { return x % 2 === 0 }

[].some(isEven) // false
[].every(isEven) // true
some和every方法還可以接受第二個參數(shù),用來綁定參數(shù)函數(shù)內(nèi)部的this變量。
3.14reduce(),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
//最后結(jié)果:15
上面代碼中,reduce方法求出數(shù)組所有成員的和。第一次執(zhí)行,a是數(shù)組的第一個成員1,b是數(shù)組的第二個成員2。第二次執(zhí)行,a為上一輪的返回值3,b為第三個成員3。第三次執(zhí)行,a為上一輪的返回值6,b為第四個成員4。第四次執(zhí)行,a為上一輪返回值10,b為第五個成員5。至此所有成員遍歷完成,整個方法的返回值就是最后一輪的返回值15。

reduce方法和reduceRight方法的第一個參數(shù)都是一個函數(shù)。該函數(shù)接受以下四個參數(shù)。

累積變量,默認(rèn)為數(shù)組的第一個成員
當(dāng)前變量,默認(rèn)為數(shù)組的第二個成員
當(dāng)前位置(從0開始)
原數(shù)組
這四個參數(shù)之中,只有前兩個是必須的,后兩個則

如果要對累積變量指定初值,可以把它放在reduce方法和reduceRight方法的第二個參數(shù)。

[1, 2, 3, 4, 5].reduce(function (a, b) {
return a + b;
}, 10);
// 25
上面代碼指定參數(shù)a的初值為10,所以數(shù)組從10開始累加,最終結(jié)果為25。注意,這時b是從數(shù)組的第一個成員開始遍歷

上面的第二個參數(shù)相當(dāng)于設(shè)定了默認(rèn)值,處理空數(shù)組時尤其有用。

function add(prev, cur) {
return prev + cur;
}

[].reduce(add)
// TypeError: Reduce of empty array with no initial value
[].reduce(add, 1)
// 1
上面代碼中,由于空數(shù)組取不到初始值,reduce方法會報錯。這時,加上第二個參數(shù),就能保證總是會返回一個值

下面是一個reduceRight方法的例子。

function subtract(prev, cur) {
return prev - cur;
}

[3, 2, 1].reduce(subtract) // 0
[3, 2, 1].reduceRight(subtract) // -4
上面代碼中,reduce方法相當(dāng)于3減去2再減去1,reduceRight方法相當(dāng)于1減去2再減去3。

由于這兩個方法會遍歷數(shù)組,所以實際上還可以用來做一些遍歷相關(guān)的操作。比如,找出字符長度最長的數(shù)組成員。

function findLongest(entries) {
return entries.reduce(function (longest, entry) {

return entry.length > longest.length ? entry : longest;

}, "");
}

findLongest(["aaa", "bb", "c"]) // "aaa"
上面代碼中,reduce的參數(shù)函數(shù)會將字符長度較長的那個數(shù)組成員,作為累積值。這導(dǎo)致遍歷所有成員之后,累積值就是字符長度最長的那個成員。

3.15indexOf(),lastIndexOf()
3.16鏈?zhǔn)绞褂?/p>

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/105939.html

相關(guān)文章

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

    摘要:它主要用在以類數(shù)組對象和可迭代對象為藍(lán)本,創(chuàng)建對應(yīng)的數(shù)組。類數(shù)組對象我們最熟悉的類數(shù)組對象,應(yīng)該就是的對象了。 在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ù)組的對象和可遍歷的對象轉(zhuǎn)為真正的數(shù)組。返回一個新的對象,該對象包含數(shù)組每個索引的值。遍歷鍵遍歷值遍歷鍵值對參考文檔標(biāo)準(zhǔn)庫對象 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ù)組學(xué)習(xí)記錄_11

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

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

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

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

    摘要:簡單總結(jié)一下的對象屬性數(shù)組指定創(chuàng)建一個數(shù)組的函數(shù)。方法數(shù)組返回一個迭代器,它返回數(shù)組的鍵值對。方法數(shù)組返回滿足回調(diào)函數(shù)中指定的測試條件的第一個數(shù)組元素的索引值。該回調(diào)函數(shù)的返回值為累積結(jié)果,并且此返回值在下一次調(diào)用該回調(diào)函數(shù)時作為參數(shù)提供。 簡單總結(jié)一下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條評論

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