javascript小算法案例 数组高阶方法的实现

一、数组求和 

1.1for循环实现

        let arr =[1,6,7,9,2,5,7]
        // 定义一个变量它的值为0
        let sum = 0
        for(let i = 0;i < arr.length; i++){
        // arr.length拿到的是数组的长度 这是循环体要循环的次数
        // arr[0] === 1 arr[1] === 6 ... 
        // 在循环的过程中 第一次循环 sum = sum + arr[0] 第一次的sum计算结果为1
                         第二次循环 sum = sum + arr[1] 第一次的sum计算结果为7
                         ...以此来推 循环结束拿到最终的结果
        sum += arr[i] // 相当于sum = sum + arr[i]
        }
        console.log(sum);

1.2forEach实现

        // forEach的本质也是一个for循环
        let arr =[1,6,7,9,2,5,7]
        sum2 = 0
        // forEach参数一是一个函数,还有参数二,可以指定this的指向,这里不列举了,有兴趣的可以查看官方文档
        // forEach的函数参数一:item 循环数组的每一项 1,6,7,9,2,5,7
        // 和上述for循环求和执行过程是一样的
        arr.forEach(item => sum2 += item)
        console.log(sum2);

1.3reduce实现

        let arr = [5,10,52,4]
        // reduce的本质也是实现了一个for循环 特殊实现是它做了一些特殊的处理 可以实现一些特殊的功能
        // reduce的返回值是一个数组
        // 函数参数一是上一次的累加和 === sum = sum + arr[0]  , reduce的参数二就是上述定义的sum的初始值0 
        let sum = arr.reduce((previousValue,item) => {
                    return previousValue+=item
                  },0)

二、把所有status 为true的 过滤出 拿到拼接的name   最终效果  奥特曼1,奥特曼3,奥特曼4

    let arr =  [{

                    name: '奥特曼1',

                    id: 1,

                    status: true,

                }, {

                    name: '奥特曼2',

                    id: 2,

                    status: false,

                }, {

                    name: '奥特曼3',

                    id: 3,

                    status: true,

                }, {

                    name: '奥特曼4',

                    id: 3,

                    status: true,

                }, {

                    name: '奥特曼5',

                    id: 3,

                    status: false,

                }]
        // filter 遍历数组每一项,返回符合结果的数据储存到一个数组中 这个数组作为返回值

        let newArr = arr.filter(item => item.status === true)

        let result = []

        let itemObj = newArr.forEach((item,index)=>{

            result.push(item.name)

        })

        console.log(result);
        // 更简洁的写法
        // map返回一个数组 这个数组的值是循环遍历处出来符合条件的值
        let newArr = arr.filter(item => item.status === true).map(item => item.name)

上述map、filter、reduce、forEach的写法都一样 可以把 map、filter、reduce看做是forEach的变形,他们只是在forEach的基础上会一些特殊技能。

三、拿到 路由重定向这个字符串

还有其它方法的实现,可以查看官方文档ECMA、或者MDN

        let url = 'https://so.csdn.net/so/search?spm=1001.2014.3001.4501&q=路由重定向&t=&u='
        // indexof找到字符串的索引
        let str = url.indexOf('路由重定向')
        console.log(str);
        // slice 参数一:从索引开始截取 参数二:截取几个
        let result = url.slice(str,str+5)
        console.log(result);

四、数组去重

        // 最后结果: [1,2,3,4,6,7,8]  
        let arr = [1,2,3,4,6,8,1,7,6,2]
        let result = arr.filter((item,index)=>{
            // indexof查找元素的索引有则返回索引位置 没有则返回-1  indexof只能查找到第一个
            return arr.indexOf(item) === index
        })
        console.log(result);

五、一个随机数 按顺序插入到数组中

// 产生一个 1-10的随机数  如果说这个随机数是10 那结果就是[2,4,5,10]  
// 产生一个 1-10的随机数  如果说这个随机数是3 那结果就是 [2,3,4,5]  
// 产生一个 1-10的随机数  如果说这个随机数是1 那结果就是 [1,2,4,5]  
let arr = [2,4,5]
function randomNum(number){
    return arr.push(number)
}
let randomNumber = Math.floor(Math.random()*10)
let arr1 = randomNum(randomNumber)
// sort数组排序方法
arr.sort()
console.log(arr);

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值