數(shù)組
-
創(chuàng)建數(shù)組的兩種基本方式
1使用構(gòu)造函數(shù)
2.數(shù)組字面量
var colors = new Array();
var colors = [];
//檢測(cè)數(shù)組 instanceof
// 1. if(value instanceof Array) {}
// 2. Array.isArray()
if(Array.isArray(value)) {
}
數(shù)組轉(zhuǎn)換方法
toString() 返回有數(shù)組中的每個(gè)值得字符串形式拼接而成的一個(gè)以逗號(hào)分隔的字符串
valueOf() 返回的還是數(shù)組
var colors = ['red', 'blue', 'green'];
// console.log(colors.toString()); //red,blue,green
// console.log(colors.valueOf()); // ["red", "blue", "green"]
console.log(colors.join(",")); //red,blue,green
console.log(colors.join()) //red,blue,green
console.log(colors.join("||")) //red||blue||green
數(shù)組方法 棧方法和隊(duì)列方法
棧方法 棧是一種后進(jìn)先出的數(shù)據(jù)結(jié)構(gòu)
隊(duì)列數(shù)據(jù)結(jié)構(gòu)是先進(jìn)先出
push() pop()
// 棧方法 棧是一種后進(jìn)先出的數(shù)據(jù)結(jié)構(gòu)
// push() pop()
// push() 添加到數(shù)組末尾
// pop()從數(shù)組末尾移除最后一項(xiàng)
var colors = new Array();
var count = colors.push("red", "green");
count = colors.push('black');
console.log(count) //3
console.log(colors) //["red", "green", "black"]
var item = colors.pop();
console.log(colors) // ["red", "green"]
shift() unshift()
// 隊(duì)列方法
// 隊(duì)列數(shù)據(jù)結(jié)構(gòu)是先進(jìn)先出
// shift() unshift()
// shift() 移除數(shù)組中的第一個(gè)項(xiàng)并返回該項(xiàng)
// unshift() 向數(shù)組前端添加任意項(xiàng)并返回新數(shù)組的長(zhǎng)度
var colors = new Array();
var count = colors.push("red", "green");
console.log(colors);
count = colors.push('black');
var item = colors.shift();
console.log(item)// red
console.log(colors)// ["green", "black"]
var colors = new Array();
var count = colors.unshift("red", "green");
console.log(count)//2
count = colors.unshift("black");
console.log(colors)// ["black", "red", "green"]
var item = colors.pop();
console.log(item) // green
console.log(colors) // ["black", "red"]
重排序方法
reverse() sort()
// reverse() sort()
// reverse()數(shù)組翻轉(zhuǎn)
// sort() 方法按升序排列數(shù)組項(xiàng)
// sort()方法本質(zhì)上實(shí)現(xiàn)是調(diào)用每個(gè)數(shù)組項(xiàng)的toString()轉(zhuǎn)型方法响禽,然后比較得到的字符串皮获,來(lái)確定排序。即使數(shù)組的每項(xiàng)都是數(shù)組酵幕,sort()方法比較的也是字符串
var value = [1,2,3,4,5];
value.reverse();
console.log(value) //[5, 4, 3, 2, 1]
var values = [0,1,5, 10, 15];
values.sort()
console.log(values) //[0, 1, 10, 15, 5]
操作方法
concat() slice() splice()
// 操作方法
// concat() 法基于當(dāng)前數(shù)組中的所有項(xiàng)創(chuàng)建一個(gè)新數(shù)組洽故。也就是將新的添加到數(shù)組的末尾血当,最后構(gòu)成新的數(shù)組硅急。也可以傳遞多個(gè)數(shù)組迂曲。
var colors = ["red", "green", "blue"];
var colors2 = colors.concat("yellow", ["blcak", "brown"]);
console.log(colors); //["red", "green", "blue"]
console.log(colors2); // ["red", "green", "blue", "yellow", "blcak", "brown"]
// slice()
// 截取
// slice() 接收一個(gè)或兩個(gè)參數(shù)靶橱。 既要返回項(xiàng)的起始和結(jié)束位置。方法不會(huì)影響原來(lái)的數(shù)組路捧。
var colors = ["red", "green", "blue", "yellow", "purple"];
var colors2 = colors.slice(1);
var colors3 = colors.slice(1, 4);
console.log(colors2); //["green", "blue", "yellow", "purple"]
console.log(colors3); //["green", "blue", "yellow"]
// splice() 主要是向數(shù)組中部插入項(xiàng)
// 刪除 插入 替換
var colors = ["red", "green", "blue"];
var removed = colors.splice(0, 1);
console.log(colors); // ["green", "blue"]
removed = colors.splice(1, 0,"yellow", "orange");
console.log(colors); // ["green", "yellow", "orange", "blue"]
removed = colors.splice(1, 1, "red", "pruple");
console.log(removed);// ["yellow"]
位置方法
indexOf() lastIndexOf()
// indexOf() lastIndexOf()
// 沒(méi)有找到的情況返回-1
var numbers = [1,2,3,4,5];
console.log(numbers.indexOf(4)) //3
迭代方法
every() 對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù)关霸,如果該函數(shù)對(duì)每一項(xiàng)返回true 著返回true
filter() 對(duì)數(shù)組中的每一項(xiàng)運(yùn)行給定函數(shù), 如果該函數(shù)會(huì)返回true的項(xiàng)組成的數(shù)組
forEach() 這個(gè)方法沒(méi)有返回值
map() 返回每次函數(shù)調(diào)用的結(jié)果組成的數(shù)組
some() 如果該函數(shù)對(duì)每一項(xiàng)返回true杰扫,著返回true
這些方法都不會(huì)修改數(shù)組的值
var numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];
var everyResult = numbers.every(function (item, index, array) {
return (item > 2)
})
console.log(everyResult) // false
var someResult = numbers.some(function (item, index, array) {
return (item > 2)
})
console.log(someResult) // true
var filterResult = numbers.filter(function (item, index, array) {
return (item > 2)
})
console.log(filterResult) // [3, 4, 5, 4, 3]
var mapResult = numbers.map(function (item, index, array) {
return item * 2
})
console.log(mapResult) // [2, 4, 6, 8, 10, 8, 6, 4, 2]
// forEach()方法 只是對(duì)數(shù)組中的每一項(xiàng)運(yùn)行傳入的函數(shù)队寇,這個(gè)方法沒(méi)有返回值。
// 本質(zhì)上與使用for循環(huán)迭代數(shù)組一樣
var numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];
numbers.forEach(function(item, indx, array) {
// 執(zhí)行操作
})
歸并方法
reduce() reduceRight()
es5新增兩個(gè)歸并數(shù)組的方法章姓。這兩個(gè)方法都會(huì)迭代數(shù)組的所有項(xiàng)佳遣,然后構(gòu)建一個(gè)最終返回的值。
reduce()方法從數(shù)組的第一項(xiàng)開(kāi)始凡伊,逐個(gè)遍歷到最后零渐。
而reduceRight()則從數(shù)組的最后一項(xiàng)開(kāi)始,向前遍歷到第一項(xiàng)系忙。
這兩個(gè)方法都接收兩個(gè)參數(shù)诵盼,一個(gè)在每一項(xiàng)上調(diào)用的函數(shù)和(可選的)作為歸并基礎(chǔ)的初始值。
傳個(gè)reduce()和reduceRight()的函數(shù)接收4個(gè)參數(shù)
前一個(gè)笨觅、當(dāng)前值拦耐、項(xiàng)的索引和數(shù)組的對(duì)象
這個(gè)函數(shù)返回的任何值都會(huì)作為第一個(gè)參數(shù)自動(dòng)傳給下一項(xiàng)。第一次迭代發(fā)生在數(shù)組的第二項(xiàng)上见剩,因此第一個(gè)參數(shù)是數(shù)組的第一項(xiàng)杀糯,第二個(gè)參數(shù)就是數(shù)組的第二項(xiàng)
// reduce() reduceRight()
// 使用reduce() 方法可以執(zhí)行求數(shù)組中所有值之和的操作
var values = [1, 2, 3, 4, 5];
var sum = values.reduce(function (prev, cur, index, array) {
return prev + cur;
})
console.log(sum) // 15
var values = [1, 2, 3, 4, 5];
var sum = values.reduceRight(function (prev, cur, index, array) {
return prev + cur;
})
console.log(sum) // 15