美文网首页
JS数组奇巧淫技

JS数组奇巧淫技

作者: CMaggie | 来源:发表于2020-08-29 10:25 被阅读0次
image.png

数组操作首先要注意且牢记splice、sort、reverse这3个常用方法是对数组自身的操作,会改变数组自身。其他会改变自身的方法是增删push/pop/unshift/shift、填充fill和复制填充copyWithin。

数组常用方法

先献上数组方法懒人图一张祭天 (除了Array.keys()/Array.values()/Array.entries()基本都有):


image.png
生成类似[1-100]这样的的数组:

测试大量数据的数组时可以这样生成:

   // fill
const arr = new Array(100).fill(0).map((item, index) => index + 1)
// Array.from() 评论区大佬指出
const arr = Array.from(Array(100), (v, k) => k + 1)
// ... + array.keys() 评论区大佬指出 生成的是0-99的数组
const ary = [...Array(100).keys()] 

new Array(100) 会生成一个有100空位的数组,这个数组是不能被map(),forEach(), filter(), reduce(), every() ,some()遍历的,因为空位会被跳过(for of不会跳过空位,可以遍历)。 [...new Array(4)] 可以给空位设置默认值undefined,从而使数组可以被以上方法遍历。

数组浅拷贝
const arr = [1, 2, 3]
const arrClone = [...arr]
// 对象也可以这样浅拷贝
const obj = { a: 1 }
const objClone = { ...obj }

浅拷贝方法有很多如arr.slice(0, arr.length)/Arror.from(arr)等,但是用了...操作符之后就不会再想用其他的了~

数组合并
const arr1 = [1, 2, 3]
const arr2 = [4, 5, 6]
const arr3 = [7, 8, 9]
const arr = [...arr1, ...arr2, ...arr3]

arr1.concat(arr2, arr3)同样可以实现合并,但是用了...操作符之后就不会再想用其他的了~

数组去重
const arr = [1, 1, 2, 2, 3, 4, 5, 5]
const newArr = [...new Set(arr)]

new Set(arr)接受一个数组参数并生成一个set结构的数据类型。set数据类型的元素不会重复且是Array Iterator,所以可以利用这个特性来去重。

数组取交集
const a = [0, 1, 2, 3, 4, 5]
const b = [3, 4, 5, 6, 7, 8]
const duplicatedValues = [...new Set(a)].filter(item => b.includes(item))
duplicatedValues // [3, 4, 5]
数组取差集
const a = [0, 1, 2, 3, 4, 5]
const b = [3, 4, 5, 6, 7, 8]
const diffValues = [...new Set([...a, ...b])].filter(item => !b.includes(item) || !a.includes(item)) // [0, 1, 2, 6, 7, 8]
数组转对象
const arr = [1, 2, 3, 4]
const newObj = {...arr} // {0: 1, 1: 2, 2: 3, 3: 4}
const obj = {0: 0, 1: 1, 2: 2, length: 3}
// 对象转数组不能用展开操作符,因为展开操作符必须用在可迭代对象上
let newArr = [...obj] // Uncaught TypeError: object is not iterable...
// 可以使用Array.form()将类数组对象转为数组
let newArr = Array.from(obj) // [0, 1, 2]
数组常用遍历

数组常用遍历有 forEach、every、some、filter、map、reduce、reduceRight、find、findIndex 等方法,很多方法都可以达到同样的效果。数组方法不仅要会用,而且要用好。要用好就要知道什么时候用什么方法。

遍历的混合使用

filter、map方法返回值仍旧是一个数组,所以可以搭配其他数组遍历方法混合使用。注意遍历越多效率越低~

const arr = [1, 2, 3, 4, 5]
const value = arr
    .map(item => item * 3)
    .filter(item => item % 2 === 0)
    .map(item => item + 1)
    .reduce((prev, curr) => prev + curr, 0)
检测数组所有元素是否都符合判断条件
const arr = [1, 2, 3, 4, 5]
const isAllNum = arr.every(item => typeof item === 'number')
检测数组是否有元素符合判断条件
const arr = [1, 2, 3, 4, 5]
const hasNum = arr.some(item => typeof item === 'number')
找到第一个符合条件的元素/下标
const arr = [1, 2, 3, 4, 5]
const findItem = arr.find(item => item === 3) // 返回子项
const findIndex = arr.findIndex(item => item === 3) // 返回子项的下标

// 我以后再也不想看见下面这样的代码了😂
let findIndex
arr.find((item, index) => {
    if (item === 3) {
        findIndex = index
    }
})

相关文章

  • JS数组奇巧淫技

    数组操作首先要注意且牢记splice、sort、reverse这3个常用方法是对数组自身的操作,会改变数组自身。其...

  • 数组的常用方法

    总结下数组的常用方法和奇巧淫技(奇巧淫技主要是reduce~)。 数组操作首先要注意且牢记splice、sort、...

  • 数组进阶

    JS数组奇巧淫技 数组进阶方法~ 数组使用方法比较多。什么时候使用什么方法,用对方法,不用对很大的原因就是数组方法...

  • iOS开发的一些奇巧淫技

    iOS开发的一些奇巧淫技 iOS开发的一些奇巧淫技

  • 奇巧淫技-2

    摘自:http://www.cocoachina.com/ios/20150210/11130.html CGfl...

  • 奇巧淫技-1

    本文摘自:http://www.cocoachina.com/ios/20141231/10783.html bl...

  • Sketchup奇巧淫技

    代开坑

  • Swift 奇巧淫技

    转载至 我的博客[http://csl.cool/2020/02/20/SwiftTips/SwiftTips/]...

  • Jupyter Notebook奇巧淫技

    Jupyter生成ppt 安装完jupyter,打开后,建立新.ipynb文件。 点击view ------ ce...

  • 区块链=奇巧淫技

    区块链最大的问题——不能让人热血沸腾, 不可能产生像马云先生一样豪言,我不懂所以我成功的巨头。 他发端于程序员对垄...

网友评论

      本文标题:JS数组奇巧淫技

      本文链接:https://www.haomeiwen.com/subject/iymdsktx.html