原生js的數(shù)組方法
-
concat
concat()方法用于合并兩個或多個數(shù)組或給數(shù)組合并值。不會更改原有數(shù)組,而是直接返回一個新數(shù)組。
語法:var newArray = arr.concat(value1,value2...value);
參數(shù):value:可選參數(shù),可以是數(shù)組,也可以是具體的變量或值
var arr1 = [1,2,3,4]; var arr2 = ["胃","必","治"]; var arr = arr1.concat(arr2); console.log(arr); // [1, 2, 3, 4, "胃", "必", "治"]
-
join
join()方法將一個數(shù)組(偽數(shù)組)的所有元素連接成一個字符串并返回。
語法:arr.join([分隔符])
參數(shù):[分隔符]:可選參數(shù),表示用什么符號分隔,如果不填的話默認(rèn)用逗號分隔。
var arr = ["我今年",18,false]; console.log(arr.join()); // 我今年,18,false console.log(arr.join("-")); // 我今年-18-false console.log(arr.join("")); // 我今年18false
-
push
后增。push()方法可向數(shù)組的末尾添加一個或多個元素,并返回新的長度。會改變原數(shù)組
語法:arr.push(value1,value2...value)
參數(shù):value:可以是數(shù)組,也可以是具體的變量或值
var a = [2,3,4]; var b = a.push(5,6); console.log(a); // [2,3,4,5,6] console.log(b); // 5
-
pop
后刪。pop()方法用于刪除數(shù)組最后一個元素,并返回最后一個元素,會改變原數(shù)組。
語法:arr.pop()
var arr = [2,3,4]; console.log(arr.pop()); // 4 console.log(arr); // [2,3]
-
shift
前刪。shift()方法可以把數(shù)組的第一個元素刪除,并返回第一個元素。會改變原數(shù)組。
語法:arr.shift()
var arr = [2,3,4]; console.log(arr.shift()); // 2 console.log(arr); // [3,4]
-
unshift
前增。unshift()方法向數(shù)組的開頭增加一個或多個元素,并返回新的長度。會改變原數(shù)組。
語法:arr.unshift(value1,value2...)
參數(shù):value:可以是數(shù)組,也可以是具體的變量或值。
var arr = [2,3,4,5]; console.log(arr.unshift(0,1)); // 6 console.log(arr); // [0,1,2,3,4,5]
-
slice
截取。slice()方法可以截取并返回一個新的數(shù)組(從start到end中的元素(不包含end))。不會修改原數(shù)組。
語法:arr.slice(start,end)
參數(shù):start:number類型,截取頭的下標(biāo);
? end:number類型,截取尾的下標(biāo);
var arr = [2,3,4,5]; console.log(arr.slice(1,3)); // [3,4] console.log(arr) // [2,3,4,5]
-
splice()
更新。splice()方法很強(qiáng)大,包含了添加和刪除,所以可以達(dá)到替換的效果。該方法返回被刪除的元素組成的數(shù)組。會改變原數(shù)組。
語法:arr.splice(index,length,value1,value2...)
參數(shù):
- index:起始下標(biāo)
- length:刪除元素的位移
- value:插入的新元素,可以是多個
// 使用splice完成刪除 var arr = [2,3,4,5,"haha"]; var arr2 = arr.splice(1,2); // 從index為1的元素開始,刪除2個元素并以數(shù)組形式返回,原數(shù)組發(fā)生改變 console.log(arr) // [2,5,"haha"] console.log(arr2) // [3,4] // 使用splice完成增加 var arr = [2,3,4,5,"haha"]; arr.splice(1,0,8,9,"bobo"); // 從index為1的位置(元素4)開始,刪除0個元素,并在index(3)對應(yīng)的元素前新增三個元素(8,9,"bobo") console.log(arr); //[2,8,9,"bobo",3,4,5,"haha"] // 使用splice完成替換 var arr = ["a","b","x","d"]; arr.splice(2,1,"c"); // 從index為2的位置("x")開始,刪除1個元素,并在該位置上增加一個新的元素"c"。 console.log(arr); // ["a","b","c","d"]
-
sort()
排序。按照Unicode編碼的位置排序,默認(rèn)升序。返回排序后的數(shù)組。會改變原數(shù)組。
var fruit = ['cherries','apples','bananas']; console.log(fruit.sort()); // ['apples','bananas','cherries'] var scores = [1,10,21,2]; console.log(scores.sort()); // [1,10,2,21]
-
reverse()
倒序。reverse()方法顛倒數(shù)組中元素的順序,返回顛倒后的數(shù)組。會改變原數(shù)組。
var arr = [2,3,4]; console.log(arr.reverse()); // [4,3,2] console.log(arr); // 4,3,2
ES5 數(shù)組方法
-
indexOf() 和 lastIndexOf()
查找。indexOf()從開始往后查找,lastIndexOf()從末尾往前查找。返回第一個查找到的元素的下標(biāo)(未找到則返回-1)。不改變原數(shù)組。
語法:
- arr.indexOf(value)
- arr.lastIndexOf(value)
參數(shù):value:查找的元素
var arr = [2,3,4,5,2]; console.log(arr.indexOf(2)); // 0 console.log(arr.indexOf(8)); // -1 console.log(arr.lastIndexOf(2)); // 4
-
forEach()
遍歷。forEach()方法可以直接對數(shù)組遍歷并用回調(diào)函數(shù)進(jìn)行操作。
語法:arr.forEach(callback(value,index,array))
參數(shù):
-
callback:回調(diào)函數(shù)
有三個參數(shù):
- value:當(dāng)前元素
- index:當(dāng)前元素的下標(biāo)
- array:整個數(shù)組
var arr = [1,2,3,4,5]; arr.forEach(function(value,index,array){ arr[index] += 1; }) console.log(arr); // [2,3,4,5,6]
-
-
every
判斷。每次遍歷回調(diào)函數(shù)都為true,才會返回true。否則返回false。
語法:arr.every(callback(value))
參數(shù):
-
callback:回調(diào)函數(shù)
參數(shù):value:遍歷的值
var arr = [1,2,-1,0,3] arr.every(function(value){ return val>0 }) // fasle var arr2 = [5,6,7] arr2.every(function(value){ return val>0 }) // true
-
-
some
判斷。只要有一個元素滿足回調(diào)函數(shù),就會返回true。全部都不滿足則返回false。
語法:arr.some(callback(value))
參數(shù):
-
callback:回調(diào)函數(shù)
參數(shù):value:遍歷的值
var arr = [1,2,3,0,-1]; arr.some(function(value){ return value < 0; }) // true var arr2 = [1,2,3,0,6]; arr2.some(function(value){ return value < 0; }) // false
-
-
map
加工。遍歷數(shù)組,并通過回調(diào)函數(shù)操作后返回一個新數(shù)組。原數(shù)組不變。
語法:arr.map(callback(value))
參數(shù):
-
callback:回調(diào)函數(shù)
有一個參數(shù):
value:當(dāng)前元素
var arr = [1,2,3,4,5]; var arr2 = arr.map(function(value){ return value * 2; }) console.log(arr); // 1,2,3,4,5 console.log(arr2); // 2,4,6,8,10
-
-
filter
過濾。遍歷數(shù)組中的元素,返回滿足回調(diào)函數(shù)的元素組成的數(shù)組。原數(shù)組不變。
語法:arr.filter(callback)
參數(shù):
-
callback:回調(diào)函數(shù)
參數(shù):value:遍歷的值
var arr = [1,2,3,4,5,6,7]; var arr2 = arr.filter(function(value){ return value % 2 == 0; }) console.log(arr); // [1,2,3,4,5,6,7] console.log(arr2); // [2,4,6]
-
-
reduce
歸并。功能很強(qiáng)大,reduce()方法從左到右為每個數(shù)組元素執(zhí)行一次回調(diào)函數(shù),并把上次回調(diào)函數(shù)的返回值放在一個暫存器中傳給下次回調(diào)函數(shù),并返回最后一次回調(diào)函數(shù)的返回值。
語法:arr.reduce(callback(acc,value,index,array),initialValue)
參數(shù):
-
callback:回調(diào)函數(shù)
acc:累積器,累計(jì)回調(diào)的返回值; 它是上一次調(diào)用回調(diào)時返回的累積值,或
initialValue
(見于下方)。value:當(dāng)前元素
index:當(dāng)前索引(可選參數(shù)
array:原數(shù)組(可選參數(shù)
initialValue:初始值(可選參數(shù)
// reduce 基本累加 var arr = [1,2,3,4]; var res = arr.reduce(function(acc,value){ return acc + value; }) console.log(res); // 10
// reduce 對對象的值進(jìn)行操作 var initialValue = 0; var arr = [{x:1},{x:2},{x:3},{x:4}] var res = arr.reduce(function(acc,value){ return acc + value.x; },initialValue) console.log(res); // 10
// reduce 將二維數(shù)組轉(zhuǎn)化為一維數(shù)組 var arr = [[0,1],[2,3],[4,5]]; var res = arr.reduce(function(acc,value){ return acc.concat(value); },[]); console.log(res); // [0,1,2,3,4,5]
// 計(jì)算數(shù)組中每個元素出現(xiàn)的次數(shù) var arr = ['Alley','Bob','Hehe','Alley','Eric','Bruce','Alley','Eric','Tiff'] var res = arr.reduce(function(allNames,name){ if(name in allNames){ allNames[name] ++; } else{ allNames[name] = 1; } return allNames; },{}); console.log(res); // {Alley: 3,Bob: 1,Bruce: 1,Eric: 2,Hehe: 1,Tiff: 1}
// 按照屬性對object進(jìn)行分類 var people = [ {name:'Alley',age:30}, {name:'Eric',age:40}, {name:'Apple',age:20}, {name:'Edan',age:30}, {name:'Code00',age:20} ] function groupBy(objectArr,property){ return objectArr.reduce(function(acc,obj){ var key = obj[property]; if(!acc[key]){ acc[key] = []; } acc[key].push(obj); return acc },{}); } var groupPeople = groupBy(people,'age'); console.log(groupPeople); // { // 20:[{{name:'Apple',age:20},{name:'Code00',age:20}}], // 30:[{name:'Edan',age:30},{name:'Alley',age:30},], // 40:[{name:'Eric',age:40}] // }
// reduce 實(shí)現(xiàn)數(shù)組去重 var arr = ['a','b','a','b','c','e','f','d','c','e'] var res = arr.reduce(function(acc,currentValue){ if(acc.indexOf(currentValue) === -1){ acc.push(currentValue); } return acc; },[]) console.log(res); // ['a','b','c','e','f','d'] // 2: var arr2 = [1,2,4,6,7,8,5,3,3,2,5,7,5,4]; var newArr = arr2.sort(); var res2 = newArr.reduce((init,current)=>{ if(init.length === 0 || init[init.length-1] !== current){ init.push(current); } return init; },[]); console.log(res2); // [1,2,3,4,5,6,7,8]
-