一、for in | for of
1)for in
for...in...用于遍歷數組或者對象的屬性。這屬性包括自身的屬性和原型鏈的可枚舉的屬性?。ǚ钦麛殿愋偷拿Q和繼承的那些)
該遍歷方法返回的先后次序可能會因瀏覽器(宿主環境)而異;
因此不建議用 for...in...去遍歷數組
let arr = [1,2,3];
let obj = {
name:'JY',
age:23.5
}
for(let key in arr/obj){
console.log(key);
//arr : 0,1,2 (0,1,2是String類型)
//過濾繼承的屬性的方法:
obj.hasOwnProperty(key)
// obj : name,age
}
2) for...of...
for...of...可以用來遍歷有迭代器(iterator)的集合(數組,類數組,Map,Set,string,arguments等),不建議用來遍歷對象,遍歷對象建議用for...in...(本質工作)
//遍歷數組
let arr = [2,3,4];
for(let value of arr){
console.log(value); // 1,2,3
}
//遍歷字符串
let str = 'boo'
for(let value of str){
console.log(value); // 'b','o','o'
}
...
for...of...方法遍歷數組時,可以正確相應break、continue、return語句
二、常用數組遍歷方法
1)arr.forEach();
forEach() 方法對數組的每個元素執行一次提供的函數。
forEach()方法不能使用break、continue、return等語句
forEach()方法不會改變原數組。
用法
[1,2,3].forEach(function(value,index,arr){
console.log(value,index,arr);
// 1,0,[1,2,3]
// 2,1,[1,2,3]
// 3,2,[1,2,3]
},this)
// this,表示函數內的this指向??梢?
2)arr.map()
map() 方法創建一個新數組,其結果是該數組中的每個元素都調用一個提供的函數后返回的結果。
即返回每個元素執行回調的返回值,組成的新數組
var numbers = [1, 4, 9];
var roots = numbers.map(Math.sqrt);
// roots的值為[1, 2, 3], numbers的值仍為[1, 4, 9]
3) arr.reduce()
對數組中的所有元素調用指定的回調函數。該回調函數的返回值為累積結果,并且此返回值在下一次調用該回調函數時作為參數提供。
reduce(function,initialValue)
initialValue 用作第一個調用 callback的第一個參數的值。 如果沒有提供初始值,則將使用數組中的第一個元素
//數組里所有值的和
var sum = [0, 1, 2, 3].reduce(function (a, b) {
return a + b;
}, 0);
// sum is 6
//將二維數組轉化為一維
var flattened = [[0, 1], [2, 3], [4, 5]].reduce(
function(a, b) {
return a.concat(b);
},
[]
);
// flattened is [0, 1, 2, 3, 4, 5]
4) arr.every()
every()方法測試數組的所有元素是否都通過了指定函數的測試。
只有每個callback函數返回true,整個arr.every()才會返回true,否則false
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
5) arr.some()
some()方法與every()方法相反,只要子元素中有一個令callback函數返回true,則整個arr.some()返回true;全不滿足則返回false;
const isBiggerThan10 = (element, index, array) => {
return element > 10;
}
[2, 5, 8, 1, 4].some(isBiggerThan10);
// false
[12, 5, 8, 1, 4].some(isBiggerThan10);
// true
array.slice()是對數組的深/淺拷貝,不會影響原數組的內部結構
num | 0 向上取整 Math.floor()類似