1.forEach —— 遍歷
forEach遍歷數(shù)組酣倾,對原來的數(shù)據(jù)操作,改變原數(shù)組
函數(shù)聲明:
[].forEach( function(value, index, array) {
//…
}, [thisArg] );
- forEach方法中第一個(gè)參數(shù)是回調(diào)函數(shù),它支持3個(gè)參數(shù):
- 第1個(gè)是遍歷的數(shù)組內(nèi)容
- 第2個(gè)是對應(yīng)索引
- 第3個(gè)是數(shù)組自身
注意:對比jQuery中的$.each方法,參數(shù)位置有變化(第1個(gè)參數(shù)和第2個(gè)剛好相反)
$.each([], function(index, value, array) {
// ...
});
例子
eg1:
[1, 2 ,3, 4].forEach(console.log);
// 1, 0, [1, 2, 3, 4]
// 2, 1, [1, 2, 3, 4]
// 3, 2, [1, 2, 3, 4]
// 4, 3, [1, 2, 3, 4]
eg2:數(shù)組求和
var sum = 0;
[1, 2, 3, 4].forEach(function (item, index, array) {
sum += item; //注:(array[index] == item)為 true
});
console.log(sum); // 10
2.第二個(gè)參數(shù)thisArg可選司澎,可用于以改變回調(diào)函數(shù)里面的this指針 :如果這第2個(gè)可選參數(shù)不指定,則使用全局對象代替(在瀏覽器是為window)栋豫,嚴(yán)格模式下甚至是undefined.
2.map —— 映射
映射挤安,創(chuàng)建新數(shù)組
函數(shù)聲明:
[].map( function(value, index, array) {
//…
}, [thisArg] );
類似于forEach,但需要注意的是:回調(diào)函數(shù)需要有return值丧鸯,否則新數(shù)組都是undefined
例子
eg1:
//求平方值
var data = [1, 2, 3, 4];
var arrayOfSquares = data.map(function (item) {
return item * item; //必須要有return
});
alert(arrayOfSquares); // 1, 4, 9, 16
eg2:可以利用map方法方便獲得對象數(shù)組中的特定屬性值們
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
個(gè)人理解
map能做的事forEach都能做蛤铜,map可以視為forEach的一個(gè)特例,專門用于“通過現(xiàn)有的數(shù)組建立新數(shù)組”丛肢。在沒有map之前是通過forEach來創(chuàng)建新數(shù)組围肥。需要預(yù)先定義空數(shù)組,再通過push操作添加元素摔踱。有map之后虐先,更進(jìn)一步優(yōu)化代碼了怨愤。
for循環(huán)優(yōu)點(diǎn)
- 可隨意跳出或退出循環(huán)
- for 循環(huán)還可以隔幾個(gè)去取值