Array所有方法詳解 http://30ke.cn/doc/js-array-method
1.forEach
let arr = [1,2,3,4,5];
arr.forEach((i)=>{
console.log(i);//1 2 3 4 5
});
這種循環(huán)的問題在于無法中途跳出循環(huán),break和return命令不能奏效.
map和filter都返回數(shù)組笆载,map返回的與原數(shù)組長度相同
2.map
let arr = ['a','b','c','d'];
let newArr = arr.map((val,key)=>{
if(val=='c'){
return val;}
});
console.log(newArr);//[undefined,undefined,'c',undefined];
3.filter
let arr = ['a','b','c','d'];
let newArr = arr.filter((val,key)=>{
if(val=='c'){
return val;
}
});
console.log(newArr);//['c']
只返回符合條件的結(jié)果一個值
every和some返回布爾值
4.for-in
遍歷對象所有的可枚舉屬性(主要是為了遍歷對象而設(shè)計的扑馁,不適用于遍歷數(shù)組)功能類似于Object.keys().
let obj = {
name:'xiaoming',
age:15
}
for(let item in obj){
console.log(item);//name age
}
不可枚舉的對象:如constructor,數(shù)組的length
let arr = [10, 20, 30, 40, 50];
for (let item in arr) {
console.log(item); // '0' '1' '2' '3' '4'
}
數(shù)組的鍵名是數(shù)字,但是for-in循環(huán)是以字符串作為鍵名‘0’凉驻、‘1’腻要、‘2’等.
5.for-of
所有實現(xiàn)了[Symbol.iterator]接口的對象都可以被遍歷±缘牵可以使用的范圍包括數(shù)組雄家、Set 和 Map 結(jié)構(gòu)、某些類似數(shù)組的對象(比如arguments對象胀滚、DOM NodeList 對象)趟济、Generator 對象,以及字符串
for..of獲取索引
.entries()返回鍵值對
.keys()返回鍵名
.values()返回鍵值
類似數(shù)組的對象:如字符串DOM NodeList 對象咽笼、arguments對象等
let str = 'hi';
for(let i of str){
console.log(s);
}//h i
let item = document.querySelectorAll('p');
for(let a of item){
a.classList.add('test');
}
(function(){
for(let x of arguments){
console.log(x);
}
})('a','b');
//'a'
//'b'
并非所有類似數(shù)組的對象都有iterator接口顷编,使用Array.from()將其轉(zhuǎn)化為數(shù)組
let ar = {length:2,0:'a',1:'b'};
for(let i of ar){
console.log(i);//報錯
}
for(let i of Array.from(ar)){
consle.log(i);//'a' 'b'
}
普通對象不能直接使用for-of會報錯,因為沒有iterator接口,for-in可以直接使用剑刑,若非要使用for-of需要使用Object.keys方法將鍵名生成一個數(shù)組媳纬,然后遍歷這個數(shù)組。
for(let key of Object.keys(obj)){
console.log(key+' '+obj[key]);
}