携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第32天,点击查看活动详情
数组的遍历方法(续)
除了用reduce()方法求和之外,我们还可以用它来求数组元素中的最大值,如:
//求最大值
var array1 = [1, 3, 6, 4, 8, 2, 0, 8, 9];
var result = array1.reduce(function (pre, cur) {
if (pre > cur) {
cur = pre;
};
return cur;
});
console.log(result);//9
解释:依次将数组中的元素传递到function函数参数中,如果前者大于后者,那么便将大者赋值给小者,再返回大者,然后又将大者与后面的数组元素做对比,以此类推得到最大值。
其实这里我们可以使用之前讲过的三元表达式来写代码,更简洁方便,如:
//求最大值
var array1 = [1, 3, 6, 4, 8, 2, 0, 8, 9];
var result = array1.reduce(function (pre, cur) {
return pre > cur ? pre : cur;
});
console.log(result);//9
其结果是一样的。
举一反三: 如果这里我们要求最小值又该如何做呢?
几个数组练习题:
1.去除数组中相同的元素,使用方法:splice() 这个方法我们之前讲过,是删除数组中指定内容,需要传递两个参数,一个是数组元素下标,一个是删除个数,下面我们来看。
var array2 = [6, 3, 6, 8, 8, 3, 0, 1, 2, 1, 9 ];
//var num = array2.length;
for (var i = 0; i <= array2.length; i++) {
for(var j = i + 1; j <= array2.length; j++) {
if (array2[i] == array2[j]) {
array2.splice(j, 1);
j--;
};
};
};
console.log(array2);//[6,3,8,0,1,2,9]
解释:这里用到了双重for循环,其实也就是为了让数组中的两个元素进行对比,如果这两个元素相等,那么将删除数组下标为j的元素,注意,这是侯数组会自动补齐空位,所以这里我们需要将j--,然后进行下一次循环j++才能将空位那里补上来的元素再进行一次对比,不然会漏掉!
这里我还要提一下,js引擎是基于事件驱动的单线程执行,所以上面的代码如果是这样写
那么就会导致浏览器卡死,为什么呢? 因为我们在这样写代码时,相当于创建了一个线程,代码里面的变量不能引用外面的,也就是num这个变量,必须把变量(array2.length)定义在里面才行。