filter():
語法:
var filteredArray = array.filter(callback, thisObject);
參數(shù)說明:
callback: 要對每個數(shù)組元素執(zhí)行的回調(diào)函數(shù)求厕。
thisObject : 在執(zhí)行回調(diào)函數(shù)時定義的this對象。
//過濾掉小于 10 的數(shù)組元素:
//代碼:
function isBigEnough(element, index, array) {
return (element >= 10);
}
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
// 12, 130, 44
//結(jié)果:[12, 5, 8, 130, 44].filter(isBigEnough) : 12, 130, 44
功能說明:
對數(shù)組中的每個元素都執(zhí)行一次指定的函數(shù)(callback)匆浙,并且創(chuàng)建一個新的數(shù)組昧穿,該數(shù)組元素是所有回調(diào)函數(shù)執(zhí)行時返回值為 true 的原數(shù)組元素。它只對數(shù)組中的非空元素執(zhí)行指定的函數(shù)署尤,沒有賦值或者已經(jīng)刪除的元素將被忽略耙替,同時,新創(chuàng)建的數(shù)組也不會包含這些元素曹体。
回調(diào)函數(shù)可以有三個參數(shù):當前元素俗扇,當前元素的索引和當前的數(shù)組對象。
如參數(shù) thisObject 被傳遞進來箕别,它將被當做回調(diào)函數(shù)(callback)內(nèi)部的 this 對象铜幽,如果沒有傳遞或者為null,那么將會使用全局對象究孕。
filter 不會改變原有數(shù)組啥酱,記住:只有在回調(diào)函數(shù)執(zhí)行前傳入的數(shù)組元素才有效厨诸,在回調(diào)函數(shù)開始執(zhí)行后才添加的元素將被忽略镶殷,而在回調(diào)函數(shù)開始執(zhí)行到最后一個元素這一期間,數(shù)組元素被刪除或者被更改的微酬,將以回調(diào)函數(shù)訪問到該元素的時間為準绘趋,被刪除的元素將被忽略。
map():
//將所有的數(shù)組元素轉(zhuǎn)換為大寫:
var strings = ["hello", "Array", "WORLD"];
function makeUpperCase(v)
{
return v.toUpperCase();
}
var uppers = strings.map(makeUpperCase);
// uppers is now ["HELLO", "ARRAY", "WORLD"]
// strings is unchanged
//結(jié)果:["hello", "Array", "WORLD"].map(makeUpperCase) : HELLO, ARRAY, WORLD
或
var users = [
{name: "張含韻", "email": "zhang@email.com"},
{name: "江一燕", "email": "jiang@email.com"},
{name: "李小璐", "email": "li@email.com"}
];
var emails = users.map(function (user) {
return user.email;
});
console.log(emails.join(", "));
// zhang@email.com, jiang@email.com, li@email.com
功能說明:
[].map(function(value, index, array) { // ... });
基本用法跟forEach方法,function需要有return值.
reduce():
reduce() 方法接收一個函數(shù)作為累加器颗管,數(shù)組中的每個值(從左到右)開始縮減陷遮,最終計算為一個值。
reduce() 可以作為一個高階函數(shù)垦江,用于函數(shù)的 compose帽馋。
語法:array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
參數(shù):function必需,每個元素要執(zhí)行的函數(shù);
* total:必需绽族。初始值, 或者計算結(jié)束后的返回值姨涡。
* currentValue:必需,當前元素吧慢。
* currentIndex:可選涛漂,當前元素的索引。
* arr:可選检诗,調(diào)用 reduce 的數(shù)組匈仗。
initialValue:可選,傳遞給函數(shù)的初始值(作為第一次調(diào)用function的第一個參數(shù))逢慌。
注意: reduce() 對于空數(shù)組是不會執(zhí)行回調(diào)函數(shù)的悠轩。如果沒有提供initialValue,reduce 會從索引1的地方開始執(zhí)行 function 方法涕癣,跳過第一個索引哗蜈。如果提供initialValue,從索引0開始坠韩。
用法:
const numbers = [65, 44, 12, 4];
const total = numbers.reduce((total, num)=> { return total + num; })
//total:125
const numbers = [{score:65}, {score:44}, {score:12}, {score:4}];
const total = numbers.reduce((total, current)=> {
return total +current.score;
},0);
//total:125
數(shù)組求和,求乘積:
var arr = [1, 2, 3, 4];
var sum = arr.reduce((x,y)=>x+y)
var mul = arr.reduce((x,y)=>x*y)
console.log( sum ); //求和炼列,10
console.log( mul ); //求乘積只搁,24
計算數(shù)組中每個元素出現(xiàn)的次數(shù):
let names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
let nameNum = names.reduce((pre,cur)=>{
if(cur in pre){
pre[cur]++
}else{
pre[cur] = 1
}
return pre
},{})
console.log(nameNum); //{Alice: 2, Bob: 1, Tiff: 1, Bruce: 1}
數(shù)組去重:
let arr = [1,2,3,4,4,1]
let newArr = arr.reduce((pre,cur)=>{
if(!pre.includes(cur)){
return pre.concat(cur)
}else{
return pre
}
},[])
console.log(newArr);// [1, 2, 3, 4]
將多維數(shù)組轉(zhuǎn)化為一維:
let arr = [[0, 1], [2, 3], [4,[5,6,7]]]
const newArr =(arr)=>{
return arr.reduce((pre,cur)=>{
return pre.concat(Array.isArray(cur)?newArr(cur):cur)
},[])
}
console.log(newArr(arr)); //[0, 1, 2, 3, 4, 5, 6, 7]
flat():
flat()用于數(shù)組數(shù)據(jù)扁平化
語法:var newArray = arr.flat(depth);
參數(shù):depth是參數(shù),指定要提取嵌套數(shù)組的結(jié)構(gòu)深度俭尖,默認值為 1氢惋;是一個可選的參數(shù);flat的返回值是一個包含將數(shù)組與子數(shù)組中所有元素的新數(shù)組稽犁。
var arr1 = [1, 2, [3, 4]];
arr1.flat();
// [1, 2, 3, 4]
var arr2 = [1, 2, [3, 4, [5, 6]]];
arr2.flat();
// [1, 2, 3, 4, [5, 6]]
var arr3 = [1, 2, [3, 4, [5, 6]]];
arr3.flat(2);
// [1, 2, 3, 4, 5, 6]
//使用 Infinity 作為深度焰望,展開任意深度的嵌套數(shù)組
arr3.flat(Infinity);
// [1, 2, 3, 4, 5, 6]
flat除了有扁平化嵌套數(shù)組之外還可以扁平化空項:
var arr4 = [1, 2, , 4, 5];
arr4.flat();
// [1, 2, 4, 5]
some():
對數(shù)組中的每個元素都執(zhí)行一次指定的函數(shù)(callback),直到此函數(shù)返回 true已亥,如果發(fā)現(xiàn)這個元素熊赖,some 將返回 true,如果回調(diào)函數(shù)對每個元素執(zhí)行后都返回 false 虑椎,some 將返回 false震鹉。它只對數(shù)組中的非空元素執(zhí)行指定的函數(shù),沒有賦值或者已經(jīng)刪除的元素將被忽略捆姜。
//檢查是否有數(shù)組元素大于等于10:
function isBigEnough(element, index, array) {
return (element >= 10);
}
var passed = [2, 5, 8, 1, 4].some(isBigEnough);
// passed is false
passed = [12, 5, 8, 1, 4].some(isBigEnough);
// passed is true
//結(jié)果:
//[2, 5, 8, 1, 4].some(isBigEnough) : false
//[12, 5, 8, 1, 4].some(isBigEnough) : true
find():
ES6開始支持传趾,find()方法返回數(shù)組中符合測試函數(shù)條件的第一個元素,否則返回undefined;
注意: find() 對于空數(shù)組,函數(shù)是不會執(zhí)行的泥技。
注意: find() 并沒有改變數(shù)組的原始值浆兰。
const array1 = [5, 12, 8, 130, 44];
const found = array1.find(element => element > 10);
console.log(found);
// expected output: 12
findIndex():
findIndex() 方法返回傳入一個測試條件(函數(shù))符合條件的數(shù)組第一個元素位置。
findIndex() 方法為數(shù)組中的每個元素都調(diào)用一次函數(shù)執(zhí)行:
1.當數(shù)組中的元素在測試條件時返回 true 時, findIndex() 返回符合條件的元素的索引位置,之后的值不會再調(diào)用執(zhí)行函數(shù)簸呈;
2.如果沒有符合條件的元素返回 -1
注意: findIndex() 對于空數(shù)組宽涌,函數(shù)是不會執(zhí)行的
注意: findIndex() 并沒有改變數(shù)組的原始值
var ages = [4, 12, 16, 20];
const index = ages.findIndex((age,index,arr)=>{
return age >= 16;
})
//index = 2
every():
對數(shù)組中的每個元素都執(zhí)行一次指定的函數(shù)(callback),直到此函數(shù)返回 false蝶棋,如果發(fā)現(xiàn)這個元素卸亮,every 將返回 false,如果回調(diào)函數(shù)對每個元素執(zhí)行后都返回 true 玩裙,every 將返回 true兼贸。它只對數(shù)組中的非空元素執(zhí)行指定的函數(shù),沒有賦值或者已經(jīng)刪除的元素將被忽略
//測試是否所有數(shù)組元素都大于等于10:
function isBigEnough(element, index, array) {
return (element >= 10);
}
var passed = [12, 5, 8, 130, 44].every(isBigEnough);
// passed is false
passed = [12, 54, 18, 130, 44].every(isBigEnough);
// passed is true
//結(jié)果:
//[12, 5, 8, 130, 44].every(isBigEnough) 返回 : false
//[12, 54, 18, 130, 44].every(isBigEnough) 返回 : true
sort()
用于對數(shù)組的元素進行排序,并返回數(shù)組吃溅。默認排序順序是根據(jù)字符串Unicode碼點溶诞。
參數(shù)fun:參數(shù)可選。規(guī)定排序順序决侈。必須是函數(shù)螺垢。
不傳參數(shù),將不會按照數(shù)值大小排序赖歌,按照字符編碼的順序進行排序
var arr = ['General','Tom','Bob','John','Army'];
var resArr = arr.sort();
console.log(resArr);//輸出 ["Army", "Bob", "General", "John", "Tom"]
var arr2 = [30,10,111,35,1899,50,45];
var resArr2 = arr2.sort();
console.log(resArr2);//輸出 [10, 111, 1899, 30, 35, 45, 50]
傳入?yún)?shù)枉圃,實現(xiàn)升序,降序
var arr3 = [30,10,111,35,1899,50,45];
arr3.sort(function(a,b){
return a - b;
})
console.log(arr3);//輸出 [10, 30, 35, 45, 50, 111, 1899]
var arr4 = [30,10,111,35,1899,50,45];
arr4.sort(function(a,b){
return b - a;
})
console.log(arr4);//輸出 [1899, 111, 50, 45, 35, 30, 10]
根據(jù)數(shù)組中的對象的某個屬性值排序
var arr5 = [{id:10},{id:5},{id:6},{id:9},{id:2},{id:3}];
arr5.sort(function(a,b){
return a.id - b.id
})
console.log(arr5);
//輸出新的排序
// {id: 2},{id: 3},{id: 5},{id: 6}, {id: 9},{id: 10}
根據(jù)數(shù)組中的對象的多個屬性值排序庐冯,多條件排序
var arr6 = [{id:10,age:2},{id:5,age:4},{id:6,age:10},{id:9,age:6},{id:2,age:8},{id:10,age:9}];
arr6.sort(function(a,b){
if(a.id === b.id)
{//如果id相同孽亲,按照age的降序
return b.age - a.age }
else{
return a.id - b.id
}
})
console.log(arr6);
//輸出新的排序:{id: 2, age: 8}, {id: 5, age: 4}, {id: 6, age: 10}, {id: 9, age: 6},{id: 10, age: 9}, {id: 10, age: 2}
合并數(shù)組:
將數(shù)組合并到第一個數(shù)組中,不會有新數(shù)組創(chuàng)建
let arr1=[1,2,3];
let arr2=[4,5,6];
Array.prototype.push.apply(arr1,arr2); //將arr2合并到了arr1中
或
let arr1=[1,2,3];
let arr2=[4,5,6];
arr1.push.apply(arr1,arr2); //arr1:[1,2,3,4,5,6]
concat()
將兩個數(shù)組連接在一起展父,并返回一個新數(shù)組
例子:arr1=[1,2,3,4]
arr2=[5,6,7,8]
alert(arr1.concat(arr2)) //結(jié)果為[1,2,3,4,5,6,7,8]
求數(shù)組最大值:
Math.max.apply(null,arr)
forEach():
//打印數(shù)組內(nèi)容:
function printElt(element, index, array) {
console.log("[" + index + "] is " + element);
}
[2, 5, 9].forEach(printElt);
//結(jié)果:
//[0] is 2
//[1] is 5
//[2] is 9
lastIndexOf():
語法:
var index = array.lastIndexOf(searchElement, fromIndex);
參數(shù)說明:
searchElement: 要搜索的元素,搜索是反方向進行的返劲。
fromIndex : 開始搜索的位置,默認為數(shù)組的長度(length)栖茉,在這樣的情況下篮绿,將搜索所有的數(shù)組元素。
功能說明
比較 searchElement 和數(shù)組的每個元素是否絕對一致(===)吕漂,當有元素符合條件時亲配,返回當前元素的索引。如果沒有發(fā)現(xiàn)痰娱,就直接返回 -1 弃榨。
//查找符合條件的元素:
var array = [2, 5, 9, 2];
var index = array.lastIndexOf(2);
// index is 3
index = array.lastIndexOf(7);
// index is -1
index = array.lastIndexOf(2, 3);
// index is 3
index = array.lastIndexOf(2, 2);
// index is 0
index = array.lastIndexOf(2, -2);
// index is 0
index = array.lastIndexOf(2, -1);
// index is 3
//結(jié)果:
//[2, 5, 9, 2].lastIndexOf(2) : 3
//[2, 5, 9, 2].lastIndexOf(7) : -1
//[2, 5, 9, 2].lastIndexOf(2, 3) : 3
//[2, 5, 9, 2].lastIndexOf(2, 2) : 0
//[2, 5, 9, 2].lastIndexOf(2, -2) : 0
//[2, 5, 9, 2].lastIndexOf(2, -1) : 3
indexOf():
功能與lastIndexOf()一樣,搜索是正向進行的
//查找符合條件的元素:
var array = [2, 5, 9];
var index = array.indexOf(2);
// index is 0
index = array.indexOf(7);
// index is -1
//結(jié)果:
//[2, 5, 9].indexOf(2) : 0
//[2, 5, 9].indexOf(7) : -1
reverse()
將數(shù)組反序
var a = [1,2,3,4,5];
var b = a.reverse(); //a:[5,4,3,2,1] b:[5,4,3,2,1]
splice()
splice() 方法向/從數(shù)組中添加/刪除項目梨睁,然后返回被刪除的元素
注意:該方法會改變原始數(shù)組
語法:arrayObject.splice(index,howmany,item1,.....,itemX)
index:必需鲸睛。整數(shù),規(guī)定添加/刪除項目的位置坡贺,使用負數(shù)可從數(shù)組結(jié)尾處規(guī)定位置
howmany:必需官辈。要刪除的元素數(shù)量箱舞。如果設(shè)置為 0,則不會刪除元素拳亿。
item1...itemX:可選晴股。向數(shù)組添加的新元素。
var arr = [1,2,3,4]
console.log(arr.splice(1,1));//[2]
console.log(arr);//[1,3,4]
刪除并添加新元素肺魁,從索引值為2處刪除兩個元素并添加元素7电湘,8,9
var a = [1,2,3,4,5];
var b = a.splice(2,2,7,8,9); //a:[1,2,7,8,9,5] b:[3,4]
slice()
方法可從已有的數(shù)組中返回選定的元素
語法:arr.slice(start,end);
//start為初始位置,end為結(jié)尾位置,返回的結(jié)果是從start到end(不取)的新數(shù)組
arr.slice(start);
//選取從start開始直至最后一個元素
var arr1 = [1,2,3,4];
console.log(arr1.slice(1)); //[2, 3, 4]
console.log(arr1.slice(1,2));//[2]
console.log(arr1);//[1,2,3,4]
shift()
刪除原數(shù)組第一項鹅经,并返回刪除元素的值寂呛;如果數(shù)組為空則返回undefined
var a = [1,2,3,4,5];
var b = a.shift(); //a:[2,3,4,5] b:1
unshift()
將參數(shù)添加到原數(shù)組開頭,并返回數(shù)組的長度
var a = [1,2,3,4,5];
var b = a.unshift(-2,-1); //a:[-2,-1,1,2,3,4,5] b:7
注:在IE6.0下測試返回值總為undefined瘾晃,F(xiàn)F2.0下測試返回值為7贷痪,所以這個方法的返回值不可靠,需要用返回值時可用splice代替本方法來使用蹦误。
pop()
刪除原數(shù)組最后一項劫拢,并返回刪除元素的值;如果數(shù)組為空則返回undefined
var a = [1,2,3,4,5];
var b = a.pop(); //a:[1,2,3,4] b:5 //不用返回的話直接調(diào)用就可以了
push()
將參數(shù)添加到原數(shù)組末尾强胰,并返回數(shù)組的長度
var a = [1,2,3,4,5];
var b = a.push(6,7); //a:[1,2,3,4,5,6,7] b:7
數(shù)組中對象某屬性的最大最小值
查找對象數(shù)組中某屬性的最大最小值的快捷方法
例如要查找array數(shù)組中對象的value屬性的最大值
var array=[
{
"index_id": 119,
"area_id": "18335623",
"name": "滿意度",
"value": "100"
},
{
"index_id": 119,
"area_id": "18335624",
"name": "滿意度",
"value": "20"
},
{
"index_id": 119,
"area_id": "18335625",
"name": "滿意度",
"value": "80"
}];
一行代碼搞定
Math.max.apply(Math, array.map(function(o) {return o.value}))
執(zhí)行以上一行代碼可返回所要查詢的array數(shù)組中對象value屬性的最大值100舱沧。
同理,要查找最小值如下即可:
Math.min.apply(Math, array.map(function(o) {return o.value}))
合并對象assign
var o1 = { a: 1 };
var o2 = { b: 2 };
var o3 = { c: 3 };
var obj = Object.assign(o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 }
console.log(o1); // { a: 1, b: 2, c: 3 }, 注意目標對象自身也會改變哪廓。
split()
使用一個指定的分隔符把一個字符串分割存儲到數(shù)組
例子: str=”jpg|bmp|gif|ico|png”;
arr=str.split(”|”);
//arr=[jpg”,”bmp”,”gif”,”ico”,”png”]
join()
使用您選擇的分隔符將一個數(shù)組合并為一個字符串
var myList=new Array(”jpg”,”bmp”,”gif”,”ico”,”png”);
var portableList=myList.join(”|”);
//結(jié)果是jpg|bmp|gif|ico|png
slice()
功能:arrayObject.slice(start,end)
start:必需狗唉。規(guī)定從何處開始選取。如果是負數(shù)涡真,那么它規(guī)定從數(shù)組尾部開始算起的位置。也就是說肾筐,-1 指最后一個元素哆料,-2 指倒數(shù)第二個元素,以此類推吗铐。
end:可選东亦。規(guī)定從何處結(jié)束選取。該參數(shù)是數(shù)組片斷結(jié)束處的數(shù)組下標唬渗。如果沒有指定該參數(shù)典阵,那么切分的數(shù)組包含從 start 到數(shù)組結(jié)束的所有元素。如果這個參數(shù)是負數(shù)镊逝,那么它規(guī)定的是從數(shù)組尾部開始算起的元素壮啊。
返回一個新的數(shù)組,包含從start到end(不包括該元素)的arrayobject中的元素撑蒜。
例子:var str='ahji3o3s4e6p8a0sdewqdasj'
alert(str.slice(2,5)) //結(jié)果ji3
substring()
定義和用法 substring 方法用于提取字符串中介于兩個指定下標之間的字符歹啼。
語法: stringObject.substring(start,stop)
start 必需玄渗。一個非負的整數(shù),規(guī)定要提取的子串的第一個字符在 stringObject 中的位置狸眼。
stop 可選藤树。一個非負的整數(shù),比要提取的子串的最后一個字符在 stringObject 中的位置多 1拓萌。
如果省略該參數(shù)岁钓,那么返回的子串會一直到字符串的結(jié)尾。
返回 一個新的字符串微王,該字符串值包含 stringObject 的一個子字符串屡限,其內(nèi)容是從 start 處到 stop-1 處的所有字符,其長度為 stop 減 start骂远。 說明 substring 方法返回的子串包括 start 處的字符囚霸,但不包括 end 處的字符。 如果 start 與 end 相等激才,那么該方法返回的就是一個空串(即長度為 0 的字符串)拓型。 如果 start 比 end 大,那么該方法在提取子串之前會先交換這兩個參數(shù)瘸恼。 如果 start 或 end 為負數(shù)劣挫,那么它將被替換為 0。
例子:var str='ahji3o3s4e6p8a0sdewqdasj'
alert(str.substring(2,6)) //結(jié)果為ji3o3
substr
定義和用法 substr 方法用于返回一個從指定位置開始的指定長度的子字符串东帅。
語法: stringObject.substr(start, length)
參數(shù): start 必需压固。所需的子字符串的起始位置。字符串中的第一個字符的索引為 0靠闭。
length 可選帐我。在返回的子字符串中應(yīng)包括的字符個數(shù)。 說明 如果 length 為 0 或負數(shù)愧膀,將返回一個空字符串拦键。 如果沒有指定該參數(shù),則子字符串將延續(xù)到stringObject的最后檩淋。
舉例: var str = "0123456789";
alert(str.substring(0));------------"0123456789"
alert(str.substring(5));------------"56789"
alert(str.substring(10));-----------""
alert(str.substring(12));-----------""
alert(str.substring(-5));-----------"0123456789"
alert(str.substring(-10));----------"0123456789"
alert(str.substring(-12));----------"0123456789"
alert(str.substring(0,5));----------"01234"
alert(str.substring(0,10));---------"0123456789"
alert(str.substring(0,12));---------"0123456789"
alert(str.substring(2,0));----------"01"
alert(str.substring(2,2));----------""
alert(str.substring(2,5));----------"234"
alert(str.substring(2,12));---------"23456789"
alert(str.substring(2,-2));---------"01"
alert(str.substring(-1,5));---------"01234"
alert(str.substring(-1,-5));--------""
charAt()
功能:返回指定位置的字符芬为。字符串中第一個字符的下標是 0。如果參數(shù) index 不在 0 與 string.length 之間蟀悦,該方法將返回一個空字符串媚朦。
例子:var str='a,g,i,d,o,v,w,d,k,p'
alert(str.charAt(2)) //結(jié)果為g
charCodeAt()
charCodeAt() 方法可返回指定位置的字符的 Unicode 編碼。這個返回值是 0 - 65535 之間的整數(shù)日戈。
方法 charCodeAt() 與 charAt() 方法執(zhí)行的操作相似询张,只不過前者返回的是位于指定位置的字符的編碼,而后者返回的是字符子串涎拉。
例子:var str='a,g,i,d,o,v,w,d,k,p'
alert(str.charCodeAt(2)) //結(jié)果為103瑞侮。即g的Unicode編碼為103