写在前面

tips:点赞 + 收藏 = 学会!

  • 本文包含radash中数组相关的所有方法说明 + 使用示例 + 思维导图查看
  • 这边会整理出一份数组相关方法的使用大纲(不含源码解析),方便大家查阅使用;
    • 作者会按照大类进行整理分享,本次也会同步给出Array所有方法的思维导图;
    • 所有方法整理完毕后,作者会整理出一份Radash库相关的所有方法的思维导图,方便大家查看使用。
  • 本文会把每个方法做标题展示,也方便大家直接在本文中阅读对应方法内容。

数组方法汇总思维导图

  • xmind文件链接可访问作者的 github地址 下载;

    • github 上还有作者之前学习前端的一些笔记,大家感兴趣可以查看。
  • 访问外网不方便的同学,可以访问gitee地址作者也有同步上传。

alphabetical:把对象数组按照选定key的value的字母顺序排列

  1. 用法说明

    • 参数:目标对象数组、用于排序的属性的回调函数、第三个参数可选(不传是升序排序,传入desc字符则表示降序排序);
    • 返回值:排序后的数组。
  2. 使用代码示例:
    import { alphabetical } from 'radash'
    
    const ig = [
    {
       name: 'ning',
       power: 100
    },
    {
       name: 'rookie',
       power: 98
    },
    {
       name: 'jkl',
       power: 95
    },
    {
       name: 'theshy',
       power: 100
    }
    ] // 这里输出的依然是对象数组,这里简单表示
    alphabetical(ig, g => g.name) // => [jkl, ning, rookie, theshy]  
    alphabetical(ig, g => g.name, 'desc') // => [theshy, rookie, ning, jkl]  

boil:找出对象数组中满足条件的对象

  1. 用法说明:

    • 参数:目标对象数组、条件函数;
    • 返回值:满足条件的对象。
  2. 使用代码示例:
    import { boil } from 'radash'
    
    const rng = [
    {
       name: 'Uzi',
       power: 100
    },
    {
       name: 'Xiaohu',
       power: 98
    },
    {
       name: 'Ming',
       power: 72
    }
    ]
    boil(gods, (a, b) => (a.power > b.power ? a : b))  // => { name: 'Uzi', power: 100 }
    boil(gods, (a, b) => (a.power < b.power ? a : b))  // => { name: 'Ming', power: 72 }

cluster:把一个数组尽量均匀的分成多个数组

  1. 用法说明:

    • 参数:目标数组、分组个数n;
    • 返回值:分组后的二维数组。
  2. 使用代码示例:
    import { cluster } from 'radash'
    
    const gods = ['Ra', 'Zeus', 'Loki', 'Vishnu', 'Icarus', 'Osiris', 'Thor', 'Apollo', 'Artemis', 'Athena']
    
    cluster(gods, 3)
    // => [
    //   [ 'Ra', 'Zeus', 'Loki' ],
    //   [ 'Vishnu', 'Icarus', 'Osiris' ],
    //   ['Thor', 'Apollo', 'Artemis'],
    //   ['Athena']
    // ]

counting:统计对象数组中每个唯一标识符的出现次数

  1. 用法说明:

    • 参数:目标对象数组、条件函数(内部是传入目标对象,返回对象身上的某一项——根据这项来做统计);
    • 返回值:统计对象。
  2. 使用代码示例:
    import { counting } from 'radash'
    
    const skt = [
    {
       name: 'Ra',
       culture: 'egypt'
    },
    {
       name: 'Zeus',
       culture: 'greek'
    },
    {
       name: 'Loki',
       culture: 'greek'
    }
    ] counting(gods, g => g.culture) // => { egypt: 1, greek: 2 }

diff:返回数组 1 中出现但是没在数组 2 中出现的项

  1. 用法说明:

    • 参数:目标数组1、目标数组2;
    • 返回值:包含符合项的数组。
  2. 使用代码示例:
    import { diff } from 'radash'
    
    const oldWorldGods = ['rng', 'uzi']
    const newWorldGods = ['vishnu', 'uzi'] diff(oldWorldGods, newWorldGods) // => ['rng']

first:获取数组第一项,不存在返回默认值

  1. 使用说明

    • 参数:目标数组,或者传递两个参数空数组和默认值;
    • 返回值:传目标数组则返回目标数组的第一项,传空数组和默认值则返回默认值。
  2. 使用代码示例
    import { first } from 'radash'
    
    const gods = ['lufee', 'loki', 'zeus']
    
    first(gods) // => 'lufee'
    first([], 'zuoluo') // => 'zuoluo'

flat:数组扁平化 —— 把包含多个数组的数组转为一个数组(注意不会递归)

  1. 使用说明

    • 参数:包含多个数组的数组;
    • 返回值:降低一维后的数组;
    • 注意:不会递归降维,只能降一维
  2. 使用代码示例

    import { flat } from 'radash'
    
    const gods = [['shy', 'ning'], ['jkl']]
    
    flat(gods) // => [shy, ning, jkl]

fork:按条件将数组拆分成两个数组,满足条件的一个,不满足条件的一个

  1. 使用说明

    • 参数:目标数组,条件函数;
    • 返回值:返回两个数组,一个保存满足条件的项,另一个保存不满足条件的项。
  2. 使用代码示例
    import { fork } from 'radash'
    
    const gods = [
    {
       name: 'Uzi',
       power: 100
    },
    {
       name: 'Xiaohu',
       power: 98
    },
    {
       name: 'Ming',
       power: 72
    },
    {
       name: 'Mlxg',
       power: 100
    }
    ] const [finalGods, lesserGods] = fork(gods, f => f.power > 90) // [[Uzi, Xiaohu, Mlxg], [Ming]]

group:根据条件函数指定的key构建一个统计对象,key为指定的key有哪些value,value为对应对象

  1. 使用说明

    • 参数:对象数组、条件函数;
    • 返回值:统计对象
  2. 使用代码示例
    import { group } from 'radash'
    
    const fish = [
    {
       name: 'Marlin',
       source: 'ocean'
    },
    {
       name: 'Bass',
       source: 'lake'
    },
    {
       name: 'Trout',
       source: 'lake'
    }
    ] const fishBySource = group(fish, f => f.source) // => { ocean: [marlin], lake: [bass, trout] }

intersects:判断两个数组是否有公共项,返回一个布尔值

  1. 使用说明

    • 参数:数组1,数组2,可选条件函数(用于提取随机标识符,对对象数组进行操作时);
    • 返回值:有返回true,否则返回false。
  2. 使用代码示例
    import { intersects } from 'radash'
    
    const oceanFish = ['tuna', 'tarpon']
    const lakeFish = ['bass', 'trout'] intersects(oceanFish, lakeFish) // => false const brackishFish = ['tarpon', 'snook'] intersects(oceanFish, brackishFish) // => true

iterate:把一个函数迭代执行指定次数

  1. 使用说明

    • 参数:迭代次数、每次迭代调用的函数、迭代初始值。
    • 返回值:返回最终一次循环迭代的值。
  2. 使用代码示例
    import { iterate } from 'radash'
    
    const value = iterate(
     4,
    (acc, idx) => {
       return acc + idx
    },
     0
    ) // => 10

last:输出数组的最后一项,如果数组为空则输出传入的默认值

  1. 使用说明

    • 参数:目标数组,或者空数组和默认值。
    • 返回值:数组最后一项,如果数组为空则输出传入的默认值。
  2. 使用代码示例
    import { last } from 'radash'
    
    const fish = ['marlin', 'bass', 'trout']
    
    const lastFish = last(fish) // => 'trout'
    const lastItem = last([], 'bass') // => 'bass'

list:创建包含特定项的数组

  1. 使用说明

    • 参数:start、end、值,步长。
    • 返回值:从start开始遍历到end,输出一个数组,包含特定项(值)的数组。
  2. 使用代码示例
    import { list } from 'radash'
    
    list(3)                  // [0, 1, 2, 3]
    list(0, 3)               // [0, 1, 2, 3]
    list(0, 3, 'y')          // [y, y, y, y]
    list(0, 3, () => 'y')    // [y, y, y, y]
    list(0, 3, i => i)       // [0, 1, 2, 3]
    list(0, 3, i => `y${i}`) // [y0, y1, y2, y3]
    list(0, 3, obj)          // [obj, obj, obj, obj]
    list(0, 6, i => i, 2)    // [0, 2, 4, 6]

max:获取对象数组中指定标识符最大的项

  1. 使用说明

    • 参数:目标对象数组、指定标识符的回调函数。
    • 返回值:符合条件的对象。
  2. 使用代码示例
    import { max } from 'radash'
    
    const fish = [
    {
       name: 'Marlin',
       weight: 105,
       source: 'ocean'
    },
    {
       name: 'Bass',
       weight: 8,
       source: 'lake'
    },
    {
       name: 'Trout',
       weight: 13,
       source: 'lake'
    }
    ] max(fish, f => f.weight) // => {name: "Marlin", weight: 105, source: "ocean"}

merge:合并数组中符合条件的项,并且会覆盖第一个数组

  1. 使用说明

    • 参数:数组1、数组2、条件函数。
    • 返回值:合并覆盖后的数组。
  2. 使用代码示例
    import { merge } from 'radash'
    
    const gods = [
    {
       name: 'Zeus',
       power: 92
    },
    {
       name: 'Ra',
       power: 97
    }
    ] const newGods = [
    {
       name: 'Zeus',
       power: 100
    }
    ] merge(gods, newGods, f => f.name) // => [{name: "Zeus" power: 100}, {name: "Ra", power: 97}]

min:获取对象数组中指定标识符最小的项

  1. 使用说明

    • 参数:目标对象数组、指定标识符的条件函数。
    • 返回值:符合条件的的项
  2. 使用代码示例
    import { min } from 'radash'
    
    const fish = [
    {
       name: 'Marlin',
       weight: 105,
       source: 'ocean'
    },
    {
       name: 'Bass',
       weight: 8,
       source: 'lake'
    },
    {
       name: 'Trout',
       weight: 13,
       source: 'lake'
    }
    ] min(fish, f => f.weight) // => {name: "Bass", weight: 8, source: "lake"}

objectify:根据函数映射的键与值把数组转换为字典对象

  1. 使用说明

    • 参数:目标对象数组、条件函数1用于提取键、[条件函数2用于提取值]
    • 返回值:字典对象
  2. 使用代码示例
    import { objectify } from 'radash'
    
    const fish = [
    {
       name: 'Marlin',
       weight: 105
    },
    {
       name: 'Bass',
       weight: 8
    },
    {
       name: 'Trout',
       weight: 13
    }
    ] objectify(fish, f => f.name) // => { Marlin: [marlin object], Bass: [bass object], ... }
    objectify(
     fish,
     f => f.name,
     f => f.weight
    ) // => { Marlin: 105, Bass: 8, Trout: 13 }

range:根据步长生成一个数值范围内的迭代值

  1. 使用说明

    • 参数:起始值、[结束值]、[迭代函数]、步长。
    • 返回值:用在for循环中循环输出处理的结果值。
  2. 使用代码示例
    import { range } from 'radash'
    
    range(3)                  // yields 0, 1, 2, 3
    range(0, 3)               // yields 0, 1, 2, 3
    range(0, 3, 'y')          // yields y, y, y, y
    range(0, 3, () => 'y')    // yields y, y, y, y
    range(0, 3, i => i)       // yields 0, 1, 2, 3
    range(0, 3, i => `y${i}`) // yields y0, y1, y2, y3
    range(0, 3, obj)          // yields obj, obj, obj, obj
    range(0, 6, i => i, 2)    // yields 0, 2, 4, 6 for (const i of range(0, 200, 10)) {
     console.log(i) // => 0, 10, 20, 30 ... 190, 200
    } for (const i of range(0, 5)) {
     console.log(i) // => 0, 1, 2, 3, 4, 5
    }

replaceOrAppend:替换对象数组中的项或是追加项(条件函数不满足时追加);

  1. 使用说明

    • 参数:被替换数组、用来的替换的数组、条件函数。
    • 返回值:替换或者追加后的数组。
  2. 使用代码示例
    import { replaceOrAppend } from 'radash'
    
    const fish = [
    {
       name: 'Marlin',
       weight: 105
    },
    {
       name: 'Salmon',
       weight: 19
    },
    {
       name: 'Trout',
       weight: 13
    }
    ] const salmon = {
     name: 'Salmon',
     weight: 22
    } const sockeye = {
     name: 'Sockeye',
     weight: 8
    } replaceOrAppend(fish, salmon, f => f.name === 'Salmon') // => [marlin, salmon (weight:22), trout]
    replaceOrAppend(fish, sockeye, f => f.name === 'Sockeye') // => [marlin, salmon, trout, sockeye]

replace :查找指定项,并用传入的去替换

  1. 使用说明

    • 参数:对象数组1、用于替换的对象、条件函数。
    • 返回值:替换目标项后的原始数组副本(新数组)。
  2. 使用代码示例
    import { replace } from 'radash'
    
    const fish = [
    {
       name: 'Marlin',
       weight: 105
    },
    {
       name: 'Bass',
       weight: 8
    },
    {
       name: 'Trout',
       weight: 13
    }
    ] const salmon = {
     name: 'Salmon',
     weight: 22
    } // read: replace fish with salmon where the name is Bass
    replace(fish, salmon, f => f.name === 'Bass') // => [marlin, salmon, trout]

select :对数组同时进行过滤和映射,筛选和转换数组中的元素;

  1. 使用说明

    • 参数:对象数组、映射条件函数、过滤条件函数。
    • 返回值:过滤完后的映射值组成的数组。
  2. 使用代码示例
    import { select } from 'radash'
    
    const fish = [
    {
       name: 'Marlin',
       weight: 105,
       source: 'ocean'
    },
    {
       name: 'Bass',
       weight: 8,
       source: 'lake'
    },
    {
       name: 'Trout',
       weight: 13,
       source: 'lake'
    }
    ] select(
     fish,
     f => f.weight,
     f => f.source === 'lake'
    ) // => [8, 13]

shift :把目标数组向右循环移动 n 个位置返回为一个新数组;

  1. 使用说明

    • 参数:目标数组、移动步数。
    • 返回值:移动后的新数组。
  2. 使用代码示例
    import { shift } from 'radash'
    const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    shift(arr, 3) // => [7, 8, 9, 1, 2, 3, 4, 5, 6]

sift:过滤调列表中值为false的项,返回剩余为true的项组成的数组;

  1. 使用说明

    • 参数:数组。
    • 返回值:过滤后的新数组。
  2. 使用代码示例
    import { sift } from 'radash'
    
    const fish = ['salmon', null, false, NaN, 'sockeye', 'bass']
    
    sift(fish) // => ['salmon', 'sockeye', 'bass']

sort :把数组按照条件函数指定的项的数值大小排序,支持升序和降序

  1. 使用说明

    • 参数:对象数组、指定标识符的条件函数、是否降序(Boolean值,不传为false)。
    • 返回值:排序后的数组。
  2. 使用代码示例
    import { sort } from 'radash'
    
    const fish = [
    {
       name: 'Marlin',
       weight: 105
    },
    {
       name: 'Bass',
       weight: 8
    },
    {
       name: 'Trout',
       weight: 13
    }
    ] sort(fish, f => f.weight) // => [bass, trout, marlin]
    sort(fish, f => f.weight, true) // => [marlin, trout, bass]

sum:数组对象根据条件函数指定想的数组求和

  1. 使用说明

    • 参数:对象数组、指定标识符的条件函数。
    • 返回值:符合条件的项的和。
  2. 使用代码示例
    import { sum } from 'radash'
    
    const fish = [
    {
       name: 'Marlin',
       weight: 100
    },
    {
       name: 'Bass',
       weight: 10
    },
    {
       name: 'Trout',
       weight: 15
    }
    ] sum(fish, f => f.weight) // => 125

toggle:查找数组中是否有我们给定的项,有则删除,没有则添加;

  1. 使用说明

    • 参数:目标数组、条件值(可以是条件函数)、在前面添加还是在后边添加。
    • 返回值:处理后的新数组。
  2. 使用代码示例
    import { toggle } from 'radash'
    
    // 基本用法
    const gods = ['ra', 'zeus', 'loki'] toggle(gods, 'ra')     // => [zeus, loki]
    toggle(gods, 'vishnu') // => [ra, zeus, loki, vishnu] // 切换(数组、条件项、指定标识符的条件函数)
    import { toggle } from 'radash' const ra = { name: 'Ra' }
    const zeus = { name: 'Zeus' }
    const loki = { name: 'Loki' }
    const vishnu = { name: 'Vishnu' } const gods = [ra, zeus, loki] toggle(gods, ra, g => g.name)     // => [zeus, loki]
    toggle(gods, vishnu, g => g.name) // => [ra, zeus, loki, vishnu] // 切换(数组、条件项、条件函数,覆盖项)
    import { toggle } from 'radash' const gods = ['ra', 'zeus', 'loki'] toggle(gods, 'vishnu', g => g, { strategy: 'prepend' }) // => [vishnu, ra, zeus, loki]

unique:数组去重,去除数组中重复的项;

  1. 使用说明

    • 参数:目标数组、指定唯一标识符的条件函数。
    • 返回值:去重后的数组。
  2. 使用代码示例
    import { unique } from 'radash'
    
    const fish = [
    {
       name: 'Marlin',
       weight: 105,
       source: 'ocean'
    },
    {
       name: 'Salmon',
       weight: 22,
       source: 'river'
    },
    {
       name: 'Salmon',
       weight: 22,
       source: 'river'
    }
    ] unique( fish, f => f.name )
    // [
    //     { name: 'Marlin', weight: 105, source: 'ocean' },
    //     { name: 'Salmon', weight: 22, source: 'river' }
    // ]

zipToObject:将第一个数组中的键映射到第二个数组中对应的值

  1. 使用说明

    • 参数:数组1、数组2(或者是传入一个函数)。
    • 返回值:映射后的对象。
  2. 使用代码示例
    import { zipToObject } from 'radash'
    
    const names = ['ra', 'zeus', 'loki']
    const cultures = ['egypt', 'greek', 'norse'] zipToObject(names, cultures)
    // => { ra: egypt, zeus: greek, loki: norse } zipToObject(names, (k, i) => k + i)
    // => { ra: ra0, zeus: zeus1, loki: loki2 } zipToObject(names, null)
    // => { ra: null, zeus: null, loki: null }

zip:把两个数组变为二维数组,二维数组中的每个数组包含两个项分别为两个传入数组的相同位置的项

  1. 使用说明

    • 参数:数组1、数组2。
    • 返回值:映射后的二维数组。
  2. 使用代码示例

    import { zip } from 'radash'
    
    const names = ['ra', 'zeus', 'loki']
    const cultures = ['egypt', 'greek', 'norse'] zip(names, cultures)
    // => [
    //   [ra, egypt]
    //   [zeus, greek]
    //   [loki, norse]
    // ]

写在后面

  • Radash库所有方法更新完毕,作者会整理一份完整方法目录上传,包括思维导图和使用目录。
  • 大家有任何问题或见解,欢迎评论区留言交流和批评指正!!!
  • 你的每一个收藏都是作者写作的动力!!!
  • 点击访问:radash官网

Radash库使用说明——数组方法篇(全)的更多相关文章

  1. 阅读lodash源码之旅数组方法篇-compact和concat

    鲁迅说过:只有阅读过优秀库源码的人,才能配的上是真正的勇士. compact 创建一个新数组,包含原数组中所有的非假值元素.例如false, null,0, "", undefin ...

  2. JavaScript数组方法大全(第二篇)

    数组方法大全(第二篇) 注意:如有错误欢迎指出,如有雷同纯属巧合,本博客参考书籍JavaScript权威指南,有兴趣的小伙伴可以去翻阅一下哦 forEach()方法 遍历数组,里面可以传递一个方法 v ...

  3. JavaScript数组方法大全(第一篇)

    数组方法大全(第一篇) 注意:第一次写博客有点小紧张,如有错误欢迎指出,如有雷同纯属巧合,本次总结参考书籍JavaScript权威指南,有兴趣的小伙伴可以去翻阅一下哦 join()方法 该方法是将数组 ...

  4. 第七十九篇:数组方法(forEach,some,every,reduce)

    好家伙,来复习几个数组方法, 1.forEach循环与some循环 代码如下: <script> const arr =['奔驰','宝马','GTR','奥迪'] //forEach循环 ...

  5. js数组方法详解(最新最全)

    数组是js中最常用到的数据集合,其内置的方法有很多,熟练掌握这些方法,可以有效的提高我们的工作效率,同时对我们的代码质量也是有很大影响.本文所有的栗子都是在es7环境下测试的,如果有问题欢迎留言交流 ...

  6. 一站式超全JavaScript数组方法大全

    一站式JavaScript数组方法大全(建议收藏) 方法一览表 详细操作 本人总结了JavaScript中有关数组的几乎所有方法(包含ES6之后新增的),并逐一用代码进行演示使用,希望可以帮助大家! ...

  7. 【翻译】JavaScript中5个值得被广泛使用的数组方法

    原文地址:http://colintoh.com/blog/5-array-methods-that-you-should-use-today?utm_source=javascriptweekly& ...

  8. Java Learning Path(四) 方法篇

    Java Learning Path(四) 方法篇 Java作为一门编程语言,最好的学习方法就是写代码.当你学习一个类以后,你就可以自己写个简单的例子程序来运行一下,看看有什么结果,然后再多调用几个类 ...

  9. 几个关于js数组方法reduce的经典片段

    以下是个人在工作中收藏总结的一些关于javascript数组方法reduce的相关代码片段,后续遇到其他使用这个函数的场景,将会陆续添加,这里作为备忘. javascript数组那么多方法,为什么我要 ...

  10. 最新数组方法(包括es6)

    整理目前所用过的数组方法,学习了新增的es6方法. 1 arr.push() 从后面添加元素,返回值为添加完后的数组的长度 let arr = [1,2,3,4,5] console.log(arr. ...

随机推荐

  1. KingbaseES使用sys_backup.sh脚本init初始化配置文件常见错误处理

    KingbaseES使用sys_backup.sh脚本init初始化配置文件常见错误处理: 一.sys_backup.sh脚本按照如下顺序寻找初始化配置文件: [kingbase@postgres ~ ...

  2. netty系列之:给ThreadLocal插上梦想的翅膀,详解FastThreadLocal

    目录 简介 从ThreadLocalMap中获取数据 FastThreadLocal 总结 简介 JDK中的ThreadLocal可以通过get方法来获得跟当前线程绑定的值.而这些值是存储在Threa ...

  3. 深入理解HashMap和TreeMap的区别

    目录 简介 HashMap和TreeMap本质区别 排序区别 Null值的区别 性能区别 共同点 深入理解HashMap和TreeMap的区别 简介 HashMap和TreeMap是Map家族中非常常 ...

  4. BiLSTM算法(一)

    原理分析: BiLSTM(双向长短期记忆网络) 是一种循环神经网络(RNN)的变体,它在自然语言处理任务中非常有效,其中包括给定一个长句子预测下一个单词. 这种效果的主要原因包括以下几点: 长短期记忆 ...

  5. LLM应用实战:当KBQA集成LLM

    1. 背景 应项目需求,本qiang~这两周全身心投入了进去. 项目是关于一个博物馆知识图谱,上层做KBQA应用.实现要求是将传统KBQA中的部分模块,如NLU.指代消解.实体对齐等任务,完全由LLM ...

  6. Matplotlib Installing an official release from resources 源码安装Matplotlib官方版本

    Installation Installing an official release Matplotlib releases are available as wheel packages for ...

  7. cv2在图像上画不同比例的锚框

    ''' cv2在图像上画不同比例的锚框 ''' import cv2 import math # 画宽高比1:1的锚框 def display_11_anchor(img,anchor_11_left ...

  8. 【笔记】go语言--函数式编程

    [笔记]go语言--函数式编程 简单来说,go语言的函数式编程体现的是一个闭包的情况 函数式编程 VS 函数指针 函数是一等公民:参数,变量,返回值都可以是函数 高阶函数 函数->闭包 &quo ...

  9. 力扣578(MySQL)-查询回答率最高的问题(中等)

    题目: 从 survey_log 表中获得回答率最高的问题,survey_log 表包含这些列:id, action, question_id, answer_id, q_num, timestamp ...

  10. 全面升级!揭秘阿里云智能Logo设计的AI黑科技

    简介: 免费体验!阿里云智能logo设计一直致力于用AI技术,帮助更多有设计需求的朋友能"多快好省"地做logo,让"设计logo"这件有门槛的事情,通过智能工 ...