面试题之reduce实现map"/>
前端面试题之reduce实现map
前端面试题之reduce实现map
- reduce函数
- 1.计算数组的总和
- 2.合并二维数组
- 3.统计一个数组中不重复单词数
- 4.对reduce的理解
- map函数
- reduce实现map
reduce函数
1.计算数组的总和
var num = [1, 2, 3, 4, 5]var res = num.reduce((total, num) => total + num, 0)console.log(res)
2.合并二维数组
var oldArray = [[0, 1], [2, 3], [4, 5]]
newArray = oldArray.reduce((a, b) => a.concat(b), [])
console.log(newArray)
3.统计一个数组中不重复单词数
var arr = ['taylor', 'swift', 'lenka', 'kripac', 'swift','lenka','kripac',]// 不使用reduce
// function CountNumberNoRepeated(array) {
// let obj = {}
// for(let item of array) {
// obj[item] = (obj[item] + 1) || 1
// }
// return obj
// }// console.log(CountNumberNoRepeated(arr))// 使用reduce
function CountNumberNoRepeated(array) {return array.reduce((prev, next) => {prev[next] = (prev[next] + 1) || 1return prev}, {})
}
console.log(CountNumberNoRepeated(arr))
4.对reduce的理解
reduce(callback,initiaValue) 方法对数组中的每个元素按序执行一个由您提供的 callback 函数,每一次运行callback函数会将先前元素的计算结果作为参数传入,最后将其结果汇总为单个返回值。
第一次执行回调函数时,不存在“上一次的计算结果”。如果需要回调函数从数组索引为 0 的元素开始执行,则需要传递初始值。否则,数组索引为 0 的元素将被作为初始值 initialValue,迭代器将从第二个元素开始执行(索引为 1 而不是 0)。
var arr = ['taylor', 'swift'];
function noPassValue(){return arr.reduce(function(prev,next){console.log("prev:",prev);console.log("next:",next);return prev;});
}function passValue(){return arr.reduce(function(prev,next){console.log("prev:",prev);console.log("next:",next);prev[next] = 1;return prev;},{});
}
console.log("No Additional parameter:",noPassValue());
console.log("----------------");
console.log("With {} as an additional parameter:",passValue());
- 完整的
reduce
函数的参数如下
reduce(function(previousValue, currentValue, currentIndex, array) { /* ... */ }, initialValue)
map函数
- map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
- map() 方法按照原始数组元素顺序依次处理元素。
-
注意: map() 不会对空数组进行检测。
-
注意: map() 不会改变原始数组。
var num = [1, 2, 3, 4, 5]var newNum = num.map(value => value * 2)
console.log(newNum)num.map((value, index) => {console.log(value, index)
})
reduce实现map
var arr = [1, 2, 3, 4, 5]Array.prototype.map_new = function(callback, cbThis=null) {let res = []this.reduce((pre, cur, curIndex, arr) => {// 传入map回调函数拥有的参数,把每一项的执行结果push进res中res.push(callback.call(cbThis, cur, curIndex, arr));}, []);return res;
};arr.map_new((cur, curIndex) => {console.log(cur, curIndex)
})
//与map对比
arr.map((value, index) => {console.log(value, index)
})
更多推荐
前端面试题之reduce实现map
发布评论