JavaScript 数组 reduce 基础及高级应用

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]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值