1.数组求和
2.累加对象数组的值
3.二维数组转一维数组
4.计算数组中每个元素出现的次数
let fruitArr = ['Apple', 'Banana', 'Orange', 'Apple'];
const fruitCount = fruitArr.reduce((acc, item) => {
if (item in acc) {
acc[item]++;
} else {
acc[item] = 1;
}
return acc;
}, {});
console.log(fruitCount); // { Apple: 2, Banana: 1, Orange: 1 }
5.将数组转换为数字
const arr = ["apple", "banana", "orange", "grape"];
const obj = arr.reduce((acc, curr, index) => {
acc[curr] = index;
return acc;
}, {}); // 将数组转换成对象
const nestedArr = [[1, 2], [3, 4], [5, 6]];
const flatArr = nestedArr.reduce((acc, curr) => acc.concat(curr), []); // 将多维数组扁平化
const str = "12345";
const num = str.split("").reduce((acc, curr) => acc * 10 + Number(curr), 0); // 将字符串转换成数字
5.按属性对 Object 进行分类
let people = [
{ name: '张三', sex: 'man', age: 20 },
{ name: '李四', sex: 'man', age: 18 },
{ name: '小红', sex: 'woman', age: 18 },
{ name: '小白', sex: 'woman', age: 20 },
];
function groupBy(objArr, property) {
return objArr.reduce((acc, obj) => {
let key = obj[property];
if (!acc[key]) {
acc[key] = [];
}
acc[key].push(obj);
return acc;
}, {});
}
const groupedBySex = groupBy(people, 'sex');
const groupedByAge = groupBy(people, 'age');
console.log('groupedBySex:', groupedBySex);
console.log('groupedByAge:', groupedByAge);
// groupedBySex : {
// man: [
// { name: '张三', sex: 'man', age: 20 },
// { name: '李四', sex: 'man', age: 20 },
// ],
// woman: [
// { name: '小红', sex: 'woman', age: 18 },
// { name: '小白', sex: 'woman', age: 20 },
// ],
// }
6.数组去重
let numArr = [1, 2, 3, 3, 2, 1, 4, 4, 4];
const result = numArr.sort().reduce((acc, current) => {
if (acc.length === 0 || acc[acc.length - 1] !== current) {
acc.push(current);
}
return acc;
}, []);
console.log('数组去重:', result); // [1,2,3,4]