javascript学习日记1

本文介绍了JavaScript中的高阶函数filter()和sort()的应用。通过具体示例展示了如何使用filter()筛选数组元素,包括一个筛选素数的练习。此外,还讨论了如何利用sort()进行定制排序,并提供了一个按字母顺序排序的例子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0.前言

今天继续使用廖大的教程进行javascript的学习。主要学习了filter()sort()等高阶函数。虽然完成了廖大的练习题,但是自己还是有自知之明的,从实际的角度上来说,我还是没有完全搞懂高阶函数,包括之前的map()reduce()

1. filter()函数

filter()函数可以用来过滤数组,将剩下的元素组合返回。filter()也接收一个函数。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃该元素。
var arr = [1, 2, 4, 5, 6, 9, 10, 15];
var r = arr.filter(function (x) {
    return x % 2 !== 0;
});
r; // [1, 5, 9, 15]//筛选掉偶数
廖大出了一个一道题目,用filter()函数筛选素数:
//以下是解决方案,此方案参考了廖大教程下方的一位同学的算法
//思路是从2开始直到element-1之前一直让element对i取余,如果结果为零说明被除1和自身之外的其他数整除,则这样的数字return false被排除即可,最后一句return element!=1可以排除1这个数字本身。
'use strict';
function get_primes(arr) {
      return arr.filter(function(element,index,self){
           for(var i = 2;i<element - 1;i++){
                if(element % i === 0){return false};
      }
      return element !=1;
   }      
)}
// 测试:
var
    x,
    r,
    arr = [];
for (x = 1; x < 100; x++) {
    arr.push(x);
}
r = get_primes(arr);
if (r.toString() === [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97].toString()) {
    alert('测试通过!');
} else {
    alert('测试失败: ' + r.toString());
}

2. sort()函数

sort()函数廖大的教程中没有练习题,不过仔细阅读了廖大的教程之后有几个特别的点要自己注意。sort()函数的排序是统一转换成String之后按照ASCLL码值进行排序的。所以在使用sort()函数的时候尽量不要直接使用sort()函数进行排序,因为sort()函数也是高阶函数,也就意味着其可以接受函数作为参数,那么在使用sort()函数的时候可以将自己的排序规则写进sort()函数的参数中来实现自己独特的排序。

下一个例子是廖大的我觉得比较经典的一个例子:

/*下面的方法是将arr进行排序,sort()中的参数function的作用是将所有的字符串全部变成大写,然后在使用sort()进行统一的
排序,这样就可以避免大小写造成的ASCLL码值比较的时候产生的意外情况*/
var arr = ['Google', 'apple', 'Microsoft'];
arr.sort(function (s1, s2) {
    x1 = s1.toUpperCase();
    x2 = s2.toUpperCase();
    if (x1 < x2) {
        return -1;
    }
    if (x1 > x2) {
        return 1;
    }
    return 0;
}); // ['apple', 'Google', 'Microsoft']

3. 后记

不知道今天的日记写完之后目录结构能不能对一次…..翻看前两天的日记发现目录结构根本对不上,说明我的Markdown语法还不够熟练,今天写的时候也有稍微注意一点,所以希望能够正确……嗯今天没有处理cocos creater的项目,看了一部动漫,算是比较荒废。不过只要坚持下来我相信一定能够学有所成!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值