ES5常見的數(shù)組方法:forEach ,map 闸翅,filter 再芋,some ,every 坚冀,reduce (除了forEach济赎,其他都有回調(diào),都有return)

關(guān)于forEach

forEach()方法需要一個(gè)回調(diào)函數(shù)(這種函數(shù)记某,是由我們創(chuàng)建但是不由我們調(diào)用的)作為參數(shù)
回調(diào)函數(shù)中傳遞三個(gè)參數(shù):
第一個(gè)參數(shù)司训,就是當(dāng)前正在遍歷的元素
第二個(gè)參數(shù),就是當(dāng)前正在遍歷的元素的索引
第三個(gè)參數(shù)液南,就是正在遍歷的數(shù)組
缺點(diǎn): 不能使用break和continue

let myArr = ['王一', '王二', '王三'];

myArr.forEach((item, index, arr) => {
    console.log('item:' + item);
    console.log('index:' + index);
    console.log('arr:' + JSON.stringify(arr));
});

結(jié)果:

item:王一
index:0
arr:["王一","王二","王三"]
----------
item:王二
index:1
arr:["王一","王二","王三"]
----------
item:王三
index:2
arr:["王一","王二","王三"]
----------

注意:forEach() 沒有返回值壳猜。也可以理解成:forEach() 的返回值是 undefined

即 let tempArry = myArr.forEach() 這種方式接收是沒有意義的

forEach() 能不能改變原數(shù)組?

  1. 數(shù)組的元素是基本數(shù)據(jù)類型:(無法改變原數(shù)組)
let numArr = [1, 2, 3];

numArr.forEach((item) => {
    item = item * 2;
});
console.log(numArr); // 打印結(jié)果:[1, 2, 3]
  1. 數(shù)組的元素是引用數(shù)據(jù)類型:(直接修改整個(gè)元素對象時(shí)滑凉,無法改變原數(shù)組)
let objArr = [
    { name: '云牧', age: 20 },
    { name: '許嵩', age: 30 },
];

objArr.forEach((item) => {
    item = {
        name: '鄧紫棋',
        age: '29',
    };
});
console.log(JSON.stringify(objArr)); 
// 打印結(jié)果:[{"name": "云牧","age": 20},{"name": "許嵩","age": 30}]
  1. 數(shù)組的元素是引用數(shù)據(jù)類型:(修改元素對象里的某個(gè)屬性時(shí)统扳,可以改變原數(shù)組)
let objArr = [
    { name: '云牧', age: 28 },
    { name: '許嵩', age: 30 },
];

objArr.forEach((item) => {
    item.name = '鄧紫棋';
});
console.log(JSON.stringify(objArr));
// 打印結(jié)果:[{"name":"鄧紫棋","age":28},{"name":"鄧紫棋","age":30}]

如果你需要通過 forEach 修改原數(shù)組,建議用 forEach 里面的參數(shù) 2 和參數(shù) 3 來做

forEach() 通過參數(shù) 2畅姊、參數(shù) 3 修改原數(shù)組:(標(biāo)準(zhǔn)做法)

// 1咒钟、數(shù)組的元素是基本數(shù)據(jù)類型
let numArr = [1, 2, 3];

numArr.forEach((item, index, arr) => {
    arr[index] = arr[index] * 2;
});
console.log(JSON.stringify(numArr)); // 打印結(jié)果:[2, 4, 6]

// 2、數(shù)組的元素是引用數(shù)據(jù)類型時(shí)若未,直接修改對象
let objArr = [
    { name: '云牧', age: 28 },
    { name: '許嵩', age: 34 },
];

objArr.forEach((item, index, arr) => {
    arr[index] = {
        name: '小明',
        age: '10',
    };
});
console.log(JSON.stringify(objArr)); 
// 打印結(jié)果:[{"name":"小明","age":"10"},{"name":"小明","age":"10"}]

// 3朱嘴、數(shù)組的元素是引用數(shù)據(jù)類型時(shí),修改對象的某個(gè)屬性
let objArr2 = [
    { name: '云牧', age: 28 },
    { name: '許嵩', age: 34 },
];

objArr2.forEach((item, index, arr) => {
    arr[index].name = '小明';
});
console.log(JSON.stringify(objArr2)); 
// 打印結(jié)果:[{"name":"小明","age":28},{"name":"小明","age":34}]

map映射

遍歷數(shù)據(jù)并返回一個(gè)新的數(shù)組粗合,對數(shù)據(jù)的處理會(huì)返回原先對應(yīng)的位置

let newData = data.list.map((item, index) => {
  return {
    id: item.id,
    title: item.title,
    price: item.price * 0.6
  }
})
console.log(newData);
let newData = data.list.map((item, index) => {
  let {id,title,price} = item;
  return {id,title,price: price * 0.6}
})
console.log(newData);

filter

返回符合條件的記錄
return true,則把當(dāng)前記錄存入新數(shù)組萍嬉,否則不存

let newData = data.list.filter((item, index) => {
  return item.price > 400
})
console.log(newData);

some

如果有符合條件的記錄乌昔,則返回真,否則返回假

let newData = data.list.some((item, index) => {
  console.log(index);
  return item.price == 400
})
console.log(newData);

every

如果每一個(gè)都符合條件帚湘,則返回真玫荣,否則返回假

let newData = data.list.every((item, index) => {
  console.log(index);
  return item.price > 600
})
console.log(newData);

reduce

常用來實(shí)現(xiàn)累加

// let arr = [300, 600, 200, 100]
// 首次調(diào)用時(shí),sum是第一個(gè)元素,val是第二個(gè)元素大诸,index是1
// 再次調(diào)用時(shí),sum是上一次return的結(jié)果贯卦,val依次是下一個(gè)元素
let result = arr.reduce((sum, val, index) => {
  // console.log(sum, val, index);
  return sum + val;
})
console.log(result);

// 第二個(gè)參數(shù)是sum的初值资柔, 則第一次調(diào)用 時(shí), val是第一個(gè)元素
let result = data.list.reduce((sum, val, index) => {
  return sum + val.price;
}, 0)
console.log(result);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末撵割,一起剝皮案震驚了整個(gè)濱河市贿堰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌啡彬,老刑警劉巖羹与,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異庶灿,居然都是意外死亡纵搁,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門往踢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腾誉,“玉大人,你說我怎么就攤上這事峻呕±埃” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵瘦癌,是天一觀的道長猪贪。 經(jīng)常有香客問我,道長讯私,這世上最難降的妖魔是什么热押? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮妄帘,結(jié)果婚禮上楞黄,老公的妹妹穿的比我還像新娘。我一直安慰自己抡驼,他們只是感情好鬼廓,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著致盟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宋光。 梳的紋絲不亂的頭發(fā)上晃择,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機(jī)與錄音伟端,去河邊找鬼。 笑死匪煌,一個(gè)胖子當(dāng)著我的面吹牛责蝠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播萎庭,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼霜医,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了驳规?” 一聲冷哼從身側(cè)響起肴敛,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吗购,沒想到半個(gè)月后医男,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捻勉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年镀梭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贯底。...
    茶點(diǎn)故事閱讀 39,711評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡丰辣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出禽捆,到底是詐尸還是另有隱情笙什,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布胚想,位于F島的核電站琐凭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏浊服。R本人自食惡果不足惜统屈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望牙躺。 院中可真熱鬧愁憔,春花似錦、人聲如沸孽拷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至膜宋,卻和暖如春窿侈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背秋茫。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工史简, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人肛著。 一個(gè)月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓圆兵,卻偏偏與公主長得像,于是被迫代替她去往敵國和親策泣。 傳聞我的和親對象是個(gè)殘疾皇子衙傀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容