// js计算数组中每个元素出现的次数
var names = ['Alice','Bob','Tiff','Bruce','Alice'];
var countedNames = names.reduce(function (allNames,name) {
if (name in allNames) {
allNames[name]++;
}
else {
allNames[name] = 1;
return allNames;
},{});
console.log(countedNames) //{Alice: 2,Bob: 1,Tiff: 1,Bruce: 1}
数组去重 Set 和 reduce 和 for循环
// var arr=[1,2,23,4,5,5];
// var newarr=new Set(arr); //去重
// console.log([...newarr]);//将伪数组转化为真实的数组 //(5) [1, 2, 23, 4, 5]
let arr = [1,3,1]
let newArr = arr.reduce((pre,cur)=>{
if(!pre.includes(cur)){
return pre.concat(cur)
}else{
return pre
}
},[])
console.log(newArr);// [1,4]
将多维数组转化为一维
let arr = [[0,1],[2,3],[4,[5,6,7]]]
const newArr = function(arr){
return arr.reduce((pre,cur)=>pre.concat(Array.isArray(cur)?newArr(cur):cur),[])
}
console.log(newArr(arr)); [0,1,7]
array.reduce(function (total,currentValue,currentIndex,arr),initialValue)
参数 描述
total 必需。初始值,或者计算结束后的返回值。
currentValue 必需。当前元素被循环的元素
currentIndex 可选。当前元素被循环的元素的索引
arr 可选。当前元素所属的数组对象。
var arr = [1,4];
var sum = arr.reduce((prev,cur,index,arr) {
console.log(prev,index);
return prev + cur;
})
console.log(arr,sum);
打印结果:
1 2 1
3 3 2
6 4 3
[1,4] 10
分析:第一次的prev 是初始值为1 ,以后的prev为返回值
cur 当前元素被循环的元素,是下标为1的那个元素
index当前元素被循环的元素的索引