为什麽必须知道怎麽使用阵列方法呢?举例来说,我们拿到一笔资料长这个样子:
let data = [5,8,9,10,20,50];
然後我们必须把这里的资料都加起来,在没有学到 forEach 或任何其他阵列方法的时候,可能我们会这麽做:
console.log(data[0]+data[1]+data[2]+data[无限延长的阵列资料]);
// 假如有一千笔,有没有写完的一天^_^
相信已经学到这里的我们,大概可以判断什麽样的程序码长得很冗长、很诡异,马上可以使我们警铃大作。使用以上的方法在目前的数值中确实是可以达到相加的结果,但实际上我们会经常不确定阵列资料的内容是什麽,因此要直接对阵列资料进行操作是很困难的。
所以,我们才需要使用阵列方法,在这里就一起来讨论 forEach 吧。
forEach 能将阵列的每一笔资料都跑一次,并传入 console.log,然後执行给定的函式。直接看范例还是比较好理解的:
let data = [30,40];
data.forEach(function(item,index,array) {
console.log(item,index,array);
// 30 0 [30, 40]
// 40 1 [30, 40]
});
上面的范例中,data 资料里面有 30 跟 40 ,代入的参数有 item、index、array,console.log 的结果是 30 和 40 都被执行了,於是我们可以知道上面的理论,我自己的说法会是:forEach 会执行阵列的每一笔资料,并且依代入的参数给予结果。
虽然前几篇已经介绍过很多次这几个参数,不过在这边为了方便阅读也还是再写一次:
以上我们又可以知道,为什麽每一笔阵列资料 console.log 之後会有三个结果。另外,参数也可以自定义名称,只要记得他的回传模式,也可以依照自己需要的回传结果代入需要的参数,并且不一定三个都要写入。
接下来要讨论的是阵列比较常见的作法,底下范例可以看到使用 forEach 能够轻松的替我们做资料的累加:
let data = [30,40,50,100,200,1500];
// total 帮助加总使用
let total = 0;
data.forEach(function(item,index,array) {
total += item;
console.log(total);
// 30
// 70
// 120
// 220
// 420
// 1920
});
forEach 和 if 的搭配,也可以轻松帮我们筛选出需要的数值,以下的小范例可以筛选出阵列里面有几个偶数,并且把选出来的偶数新增一个偶数阵列。
let data = [30,40,50,100,200,1500,33333,111111];
let total = 0;
// 这里新增一个空阵列,供筛选出的偶数使用
let newData = [];
data.forEach(function (item,index) {
if(item%2 == 0) {
total += 1;
// 到此会选出偶数,接着新增变数,将偶数整理出一个阵列
newData.push(item);
};
});
console.log(total); // 6
console.log(newData); // [30, 40, 50, 100, 200, 1500]
forEach 也有读取资料的能力,除了能读取数字以外,也能读取字串、阵列资料、阵列以及物件。
let data = [
{
name: "Tom",
sex: "male"
},
{
name: "Mary",
sex: "woman"
}
];
data.forEach(function(item,index) {
console.log(item.name,item.sex); // Tom male, Mary woman
});
以上简单的拿了几个例子出来讨论,我的感觉是,在练习的过程会发现上面这些都只是概念,而在实际操作里几乎都是以上这些例子的延伸或是混合,因此这里我就没有再附上其他更复杂的例子,越到後面越发现重点比较是前面的概念有没有弄得很清楚。
<<: Day 22 「戏如人生」以真实案例分析 Clean Architecture 的分层原则
视图小帮手 form_for和 link_to都是view helper 这个form_for的程序...
今天安装了个debian10,发现网上包括各大镜像网站提供的源地址都有点问题,经测试,Debian ...
完成的页面也不少了,距离完赛剩3天,就不刻画面了,先来串串api啦! 刚好可以把之前假资料的部分全部...
昨天提到了Generative Model以及Low-density Separation,今天就要...
<img src="https://miro.medium.com/max/700/0*4Pr...