- 数组操作
- 删除数组的重复项
- 替换数组中的特定值
有时在创建代码时需要替换数组中的特定值,有一种很好的简短方法可以做到这一点,咱们可以使用.splice(start、value to remove、valueToAdd),这些参数指定咱们希望从哪里开始修改、修改多少个值和替换新值。 - Array.from 达到 .map 的效果 使用.map() 方法,.from() 方法也可以用来获得类似的效果且代码也很简洁。
Array.from(arrayLike[, mapFn[, thisArg]])
arrayLike
想要转换成数组的伪数组对象或可迭代对象。
mapFn 可选
如果指定了该参数,新数组中的每个元素会执行该回调函数。
thisArg 可选
可选参数,执行回调函数 mapFn 时 this 对象。 - 置空数组
有时候我们需要清空数组,一个快捷的方法就是直接让数组的 length 属性为 0,就可以清空数组了。 - 将数组转换为对象
有时候,出于某种目的,需要将数组转化成对象,一个简单快速的方法是就使用展开运算符号(…): - 用数据填充数组
在某些情况下,当创建一个数组并希望用一些数据来填充它,这时 .fill()方法可以帮助咱们。 - 数组合并
使用展开操作符,也可以将多个数组合并起来。 - 求两个数组的交集
- 从数组中删除虚值
在 JS 中,虚值有 false, 0,’’, null, NaN, undefined。可以 .filter() 方法来过滤这些虚值。 - 从数组中获取随机值
有时我们需要从数组中随机选择一个值。一种方便的方法是可以根据数组长度获得一个随机索引 - 对数组中的所有值求和
JS 面试中也经常用 reduce 方法来巧妙的解决问题 - 类数组变数组
- 数组降维 * 二维数组
- 数组降维 * 多维数组
数组操作
删除数组的重复项
const arr = [1, 2, 1, 12, 2, 1, 12, 2, 1]1. const uniqueArr = Array.from(new Set())2. const uniqueArr = [...new Set(arr)]3. const uniqueArr = arr => {let tmp = {}arr.forEach(i => {tmp[i] = 0})return Object.keys(tmp)}
替换数组中的特定值
有时在创建代码时需要替换数组中的特定值,有一种很好的简短方法可以做到这一点,咱们可以使用.splice(start、value to remove、valueToAdd),这些参数指定咱们希望从哪里开始修改、修改多少个值和替换新值。
arr.splice(start, value to remove , valueToAdd, ...valueToAdd)
Array.from 达到 .map 的效果 使用.map() 方法,.from() 方法也可以用来获得类似的效果且代码也很简洁。
Array.from(arrayLike[, mapFn[, thisArg]])
arrayLike
想要转换成数组的伪数组对象或可迭代对象。
mapFn 可选
如果指定了该参数,新数组中的每个元素会执行该回调函数。
thisArg 可选
可选参数,执行回调函数 mapFn 时 this 对象。
const friends = [{name: '123',age: 18},{name: '234',age: 20}]Array.from(friends, ({ name }) => name)
置空数组
有时候我们需要清空数组,一个快捷的方法就是直接让数组的 length 属性为 0,就可以清空数组了。
arr.legth = 0
将数组转换为对象
有时候,出于某种目的,需要将数组转化成对象,一个简单快速的方法是就使用展开运算符号(…):
obj = { ...arr }
用数据填充数组
在某些情况下,当创建一个数组并希望用一些数据来填充它,这时 .fill()方法可以帮助咱们。
const arr = new Array(10).fill('1')
数组合并
使用展开操作符,也可以将多个数组合并起来。
1. arr.concat(arr2)2. arr = [...arr2, ...arr3, ...arr4]
求两个数组的交集
求两个数组的交集在面试中也是有一定难度的正点,为了找到两个数组的交集,首先使用上面的方法确保所检查数组中的值不重复,接着使用.filter 方法和.includes 方法。
;[...new Set(arr)].filter(item => arr2.include(item))
从数组中删除虚值
在 JS 中,虚值有 false, 0,’’, null, NaN, undefined。可以 .filter() 方法来过滤这些虚值。
var j = arr.filter(Boolean)
从数组中获取随机值
有时我们需要从数组中随机选择一个值。一种方便的方法是可以根据数组长度获得一个随机索引
arrs[Math.floor(Math.random() * arrs.length)]
对数组中的所有值求和
JS 面试中也经常用 reduce 方法来巧妙的解决问题
var nums = [1,23,3,4]total = nums.reduce((total,item)=> total + item ), 0)
:::warning 如果是空数组使用 reduce 并且没有赋初始值会抛出错误* Reduce of empty array with no initial value :::
类数组变数组
1. Array.from(args)2. [].slice.call(args)3. Array.prototype.slice.call(args)4. Array.prototype.concat.apply([], args)5. Array.protytype.splice.call(args, 0)
数组降维 * 二维数组
const arr = [123, [234,983] , 888]1. [].concat.call([], ...arr)2. [].concat.apply([], arr)3. [1, [2], 3].flatMap((v) => v)
数组降维 * 多维数组
1. const flattenDeep = (arr) => {Array.isArray(arr) ? arr.reduce( (a, b) => [...a, ...flattenDeep(b)] , []) : [arr]}flattenDeep([1, [[2], [3, [4]], 5])2. function flattenDeep() {let newArr = []function a(arr) {arr.forEach(val => {if (toString.call(val) === '[object Array]') {a(val)} else {newArr.push(val)}})return newArr}return a}flattenDeep()([1, [[2], [3, [4]], 5])3.function flatten(arr) {while (arr.some(item => Array.isArray(item))) {arr = [].concat.apply([], arr);}return arr;}4.let arr1 = arr.toString().split(',').map((val) => {return parseInt(val)})console.log(arr1)
- for of ```javascript const arr = { name: ‘ealien’, age: ‘18’, sex: ‘male’ }
for (const [key, val] of Object.entries(arr)) { console.log(key, val) } // name ealien // age 18 // sex male
17 数组乱序```javascriptfunction shuffle(arr) {let m = arr.length;while (m > 1){let index = Math.floor(Math.random() * m--);[arr[m] , arr[index]] = [arr[index] , arr[m]]}return arr;}
