首页 > 编程语言 >JavaScript——数组的归并方法

JavaScript——数组的归并方法

时间:2024-01-05 16:22:06浏览次数:41  
标签:pre 归并 return cur JavaScript length result 数组 myReduce

JavaScript的reduce和reduceRight的作用是通过遍历数组得到一个结果,原理如下:

function myReduce(execute, initValue) {
    const length = this.length
    let result

    for (let i = 0; i < length; i++) {
        if (i === 0) {
            const hasInitValue = initValue !== void 0,
                startIndex = hasInitValue ? 0 : 1

            i = startIndex
            result = execute(hasInitValue ? initValue : this[0], this[i], i, this)
        } else {
            result = execute(result, this[i], i, this)
        }
    }

    return result
}

function myReduceRight(execute, initValue) {
    const length = this.length
    let result

    for (let i = length - 1; i >= 0; i--) {
        if (i === length - 1) {
            const hasInitValue = initValue !== void 0,
                startIndex = hasInitValue ? length - 1 : length - 2

            i = startIndex
            result = execute(hasInitValue ? initValue : this[length - 1], this[i], i, this)
        } else {
            result = execute(result, this[i], i, this)
        }
    }

    return result
}

Array.prototype.myReduce = myReduce
Array.prototype.myReduceRight = myReduceRight

案例01——数组求和

array.myReduce(function (pre, cur, index, context) {
    return pre + cur
})

案例02——数组统计

array.myReduce(function (pre, cur, index, context) {
    if (pre[cur]) {
        pre[cur]++
    } else {
        pre[cur] = 1
    }

    return pre
}, {})

案例03——扁平化数组

array.myReduce(function (pre, cur, index, context) {
    if (Array.isArray(cur)) {
        pre.splice(pre.length, 0, ...cur)
    } else {
        pre.push(cur)
    }

    return pre
}, [])

案例04——数组去重

array.myReduce(function (pre, cur, index, context) {
    if (pre.includes(cur)) {
        return pre
    } else {
        pre.push(cur)
    }

    return pre
}, [])

欢迎评论,欢迎纠错,我们一起成长!
[email protected]

标签:pre,归并,return,cur,JavaScript,length,result,数组,myReduce
From: https://www.cnblogs.com/xiangyuzhou/p/17947504

相关文章

  • 数组
    数组的概述数组的特点:数组是有序排列的。1、数组属于引用数据类型的变量。数组的元素既可以是基本数据类型也可以是引用数据类型。2、创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是这块连续空间的首地址。3、数组的长度一旦确定,就不能修改。数组的分类按......
  • MySQL 8.0的SQL查询JSON返回的数据类型为字符串而非数组
    在MySQL8.0中,SQL查询JSON返回的数据类型确实是字符串,而不是数组。这是因为MySQL将JSON数据存储为字符串,并提供了一些函数和操作符来处理JSON数据。但是,你可以使用内置的JSON函数来处理返回的JSON字符串。例如,你可以使用JSON_EXTRACT函数来提取JSON字符串......
  • 关于JavaScript的技巧一
    1.滚动到页面顶部我们可以使用window.scrollTo()平滑滚动到页面顶部。constscrollToTop=()=>{window.scrollTo({top:0,left:0,behavior:"smooth"});};2.滚动到页面底部当然,如果知道文档的高度,也可以平滑滚动到页面底部。constscrollToBottom=()=>{wind......
  • 指针数组与数组指针的区别及相关知识
    区别:指针数组:定义int*p[n]可称为指针的数组,是数组,数组里的元素都是指针。也就是说数组存储的是指针,数组占多少字节由数组本身决定。指针数组+1不同类型的变化如下//eg:用指针parr指向一个一维数组intmain(){ int*parr[5]={0,1,2,3,4}; printf("%x\n",parr);//数组名代......
  • 2024-01-03:用go语言,给你两个长度为 n 下标从 0 开始的整数数组 cost 和 time, 分别表示
    2024-01-03:用go语言,给你两个长度为n下标从0开始的整数数组cost和time,分别表示给n堵不同的墙刷油漆需要的开销和时间。你有两名油漆匠,一位需要付费的油漆匠,刷第i堵墙需要花费time[i]单位的时间,开销为cost[i]单位的钱。一位免费的油漆匠,刷任意一堵墙的时间为1......
  • 稀疏数组
    问题介绍需求:编写五子棋游戏中,有存盘退出和续上盘的功能。 分析问题:因为二维数组的很多值是默认值0,因此记录了很多没有意义的数据。解决:稀疏数组概念当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。稀疏数组的处理方式是:记录数组一共有......
  • javascript的Map和Set概念以及区别和使用场景
    Map和SetJavaScript的默认对象表示方式{}可以视为其他语言中的Map或Dictionary的数据结构,即一组键值对。但是JavaScript的对象有个小问题,就是键必须是字符串。但实际上Number或者其他数据类型作为键也是非常合理的。MapMap是一组键值对的结构,具有极快的查找速度。举个例子,假设要根......
  • 25个JavaScript One-Liner让你更专业
    今天我们分享一些单行代码技巧,了解这些技巧,可以提升我们的工作效率,现在,我们一起来看一下今天的这些单行代码技巧吧。数组1.检查变量是否是数组constisArray=Array.isArray(arr);constisArray=arrinstanceofArray;2.数字数组的和constsum=(arr)=>arr.reduce((a,b)......
  • 【C++】STL 容器 - stack 堆栈容器 ① ( stack 堆栈容器特点 | stack 堆栈容器与 dequ
    文章目录一、stack堆栈容器简介1、stack堆栈容器引入2、stack堆栈容器特点3、stack堆栈容器与deque双端数组容器对比二、代码示例-stack堆栈容器简单示例1、代码示例2、执行结果一、stack堆栈容器简介1、stack堆栈容器引入C++语言中的STL标准模板库中的stac......
  • 数组指针的用法
    #define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>//参数是数组形式voidprint1(intarr[3][5],intx,inty)//用数组形式接收,再接收传来的参数{ inti=0; intj=0; for(i=0;i<x;i++) { for(j=0;j<y;j++) { printf("%d",arr[i][j]);......