数组
js实现Map()
语法
array.map(function(currentValue, index, arr), thisValue)
map() 方法返回一个新数组,数组中的元素为原始数组元素按顺序依次调用函数处理后的值。
注意: map() 不会对空数组进行检测
参数
currentValue(必须): 当前元素的值
index (可选): 当前元素的索引值
arr (可选): 当前元素属于的数组对象
thisValue(可选) 传递给回调函数,用作 “this” 的值。
实现
1 | Array.prototype.myMap = function (callback, thisArgs) { |
js实现Filter()
语法
array.filter(function(currentValue,index,arr), thisValue)
filter() 方法创建一个新数组,新数组中的元素是:符合检查函数中的条件的所有元素。
注意: filter() 不会改变原始数组。
参数
对每一项执行的函数,接收三个参数:
currentValue(必须): 数组项的值
index(可选): 数组项的下标
arr(可选): 数组对象本身
thisValue(可选): 指定 this 的作用域对象
实现
1 | Array.prototype.myFilter = function (callback, thisArgs) { |
js实现Reduce()
语法
array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
reduce() 方法接收一个函数,一个用来执行每个数组元素的函数。数组中的每个值(从左到右)开始缩减,最终计算为一个值。
initialValue (可选): 传递给函数的初始值
注意: reduce() 对于空数组,是不会执行回调函数的
参数
total(必须): 初始值, 或者计算结束后的返回值。
currentValue(必须): 当前元素
currentIndex(可选): 当前元素的索引
arr(可选):当前元素所属的数组对象
initialValue(可选): 传递给函数的初始值
思路
判断参数是否异常
如何判断 initialValue 参数是否存在:arguments.length
如何判断数组元素为 empty:hasOwnProperty
不存在 initialValue 时的处理逻辑:
没有初始值参数时,reduce 会将第一个非 empty 的值作为初始值,并从该值的下一个值开始执行 reducer。
实现
1 | Array.prototype.myReduce = function(reducer, initialValue) { |
用法
- 计算数组中每个元素出现的次数
1 | let names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice']; |
- 数组求和,求乘积
1 | var arr = [1, 2, 3, 4]; |
数组去重
1
2
3
4
5
6
7
8
9
10
11
12let arr = [1,2,3,4,4,1]
let newArr = arr.reduce((pre,cur)=>{
if(!pre.includes(cur)){
// 注意此处不用push(改变原数组),而使用concat(返回新数组)。
// pre.push(cur) 返回的是添加后的数组长度,是一个number
return pre.concat(cur)
}else{
return pre
}
},[])
console.log(newArr);// [1, 2, 3, 4]多维数组转化为一维
1
2
3
4
5
6
7
8let arr = [[0, 1], [2, 3], [4,[5,6,7]],[6,[[33],[1,5]]]];
function func (arr){
return arr.reduce((prev,cur)=>prev.concat(Array.isArray(cur) ? func(cur) : cur),[])
}
console.log(func(arr));
- 本文作者:JSZ
- 本文链接:blog.vampuck.com/2022/02/19/array/index.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!