图片来源:tooto1985/js-array-operations
万能又好用的回圈之於前端开发者,就好比皮卡丘之於小智,那麽不可或缺。
BUT!!!为了挑战更强的道馆,必须要有其他的神奇宝贝啊~
为了从JS幼幼班毕业,必须要学会功能齐全又语意明确的阵列方法啊~
系列I来学习怎麽使用不会改变原阵列
的Array Method吧!
使用目的 | 方法名称 | 回传值 |
---|---|---|
Array.prototype.forEach() | undefined | |
想建立一个新阵列,且需要对原阵列的元素做处理 | Array.prototype.map() | 回呼函式回传结果所组成的新阵列 |
需要产生符合特定条件的新阵列 | Array.prototype.filter() | 通过回呼函式检验的新阵列 |
加总资料/转换资料格式 | Array.prototype.reduce() | 运算结果/整理後的资料 |
上述每个方法的括弧中都可以放入一个callback function,且可以传入三个参数,依序是
reduce的callback function参数跟其他三者不同,依序是
以下用Wes Bos 的Javascript 30: Array Cardio 做为范例来特训
const inventors = [
{ first: 'Albert', last: 'Einstein', year: 1879, passed: 1955 },
{ first: 'Isaac', last: 'Newton', year: 1643, passed: 1727 },
{ first: 'Galileo', last: 'Galilei', year: 1564, passed: 1642 },
{ first: 'Marie', last: 'Curie', year: 1867, passed: 1934 },
{ first: 'Johannes', last: 'Kepler', year: 1571, passed: 1630 },
{ first: 'Nicolaus', last: 'Copernicus', year: 1473, passed: 1543 },
{ first: 'Max', last: 'Planck', year: 1858, passed: 1947 },
{ first: 'Katherine', last: 'Blodgett', year: 1898, passed: 1979 },
{ first: 'Ada', last: 'Lovelace', year: 1815, passed: 1852 },
{ first: 'Sarah E.', last: 'Goode', year: 1855, passed: 1905 },
{ first: 'Lise', last: 'Meitner', year: 1878, passed: 1968 },
{ first: 'Hanna', last: 'Hammarström', year: 1829, passed: 1909 }
];
// 使用for-loop
const fullNameList = [];
for (let index = 0; index < inventors.length; index++) {
const fullName = inventors[index].first + ' ' + inventors[index].last;
fullNameList.push(fullName);
};
console.log(fullNameList);
// 使用array method
const fullName = inventors.map( inventor => inventor.first + ' ' + inventor.last);
比较两者可以发现阵列方法让程序码更简洁
// 使用for-loop
const inventorBornIn1500s = []; -> 代表需要新阵列
inventors.forEach(inventor => {
// 代表资料需要符合特定条件才放入新阵列中
if (inventor.year >= 1500 && inventor.year < 1600) {
inventorBornIn1500s.push(inventor);
};
});
// 使用array method
const inventorBornIn1500s = inventors.filter( inventor => 1500 <= inventor.year && inventor.year < 1600);
观察心得:
const result = inventors.reduce((totalYears, inventor) => {
const yearsLived = inventor.passed - inventor.year
return totalYears + yearsLived
}, 0);
// 这里的累加器命名作totalYears
// 0 是指定的初始值
使用reduce要注意的小地方:
undefined
第一个元素
作为累加器今日特训到此结束,如果脑袋出现阵列方法排斥反应的话,没关系的,至少我们还有回圈皮卡丘可以依靠。
明天记得继续来特训喔~
参考资料及学习资源:
JAVASCRIPT 30
Array Methods - MDN
<<: Day3. 从Example Code瞧瞧Matter.js的盘古开天
同步发表到驴形笔记 版本控制 一路走来学习了各种东西与一次重构,终於快要到将网站部属的阶段了!现在...
哈罗大家好!我是阿关 是说第一次参加铁人赛就想要挑战一个自己完全不熟悉的题目 我也是觉得自己蛮有勇...
至目前的章节为止,已经可以执行 Genero FGL的程序在 Windows/MAC/Linux ...
本次要介绍的原件为Spinner, Spinner为下拉式选单, 其优点为节省空间, 本篇会先说明如...
昨天教到了模组这个概念,还提到怎麽建立以及各种汇入的方式。那既然Python有很多内建的函式,当然也...