数组的方法
Array.prototype.reduce()
reduce() 方法会对数组中的每个元素按序执行一个由您提供的 reducer 函数,每一次运行 reducer 会将先前元素的计算结果作为参数传入,最后将其结果汇总为单个返回值;第一次执行时没有上一次的结果,所以如果你没有设定初始值,那么这个初始值就是数组索引为 0 的元素,如果设定了初始值,迭代器会从第二个元素(索引为 1 的那个元素)开始执行函数
关于 reduce()的几个简单用法
// 1. 计算和
const arr = [1, 2, 3, 4];
const result1 = arr.reduce((pre, current) => {
return pre + current;
});
console.log(result1); // 10
// reduce()传入第二个参数作为初始值
const arr2 = [1, 2, 3, 4];
const result2 = arr2.reduce((pre, current) => {
return pre + current;
// return pre - curr > 0 ? pre : curr 也可获得最值
}, 5);
console.log(result2); // 15
// 2.获取数组中的最值
const arr3 = [1, 2, 3, 4, 9, 11, 34, 12, 55];
const result3 = arr3.reduce((pre, curr) => {
return pre > curr ? pre : curr;
});
console.log(result3); // 55
/*
获取数组最值还可利用数学函数
*/
const arr4 = [1, 2, 3, 4, 9, 11, 34, 12, 55];
const result4 = Math.min(...arr4);
console.log(result4); // 1
// reduce() 结合Math函数更直接
const arr5 = [1, 2, 3, 4, 9, 11, 34, 12, 55];
const result = arr5.reduce((pre, curr) => {
return Math.max(pre, curr);
});
console.log(result); // 55
// 3.二维数组转一维
// 当然数组扁平化最便捷的方式还是利用数组本身提供的方法Array.prototype.flat()
const arr6 = [
[1, 2],
[3, 4],
];
const result = arr6.reduce((pre, curr) => {
return pre.concat(curr);
}, []);
console.log(result); // [1, 2, 3, 4]
// 4. 计算数组中每个元素出现的次数
const arr7 = [
"apple",
"banana",
"noodles",
"tomatoes",
"pear",
"apple",
"tomatoes",
];
const result = arr7.reduce((pre, curr) => {
if (curr in pre) {
pre[curr]++;
} else {
pre[curr] = 1;
}
return pre;
}, {
});
console.log(result); // {apple: 2, banana: 1, noodles: 1, tomatoes: 2, pear: 1}
// 5. 数组去重
const arr8: string[] = [
"a",
"b",
"a",
"b",
"b",
"c",
"e",
"e",
"c",
"d",
"d",
"d",
];
const result = arr8.reduce((pre: string[], curr: string) => {
if (!pre.includes(curr)) {
pre.push(curr);
}
return pre;
}, []);
console.log(result); // ['a', 'b', 'c', 'e', 'd']
// 当然更简单的去重方式是使用Set数据结构 console.log(Array.from(new Set(arr))) // ['a', 'b', 'c', 'e', 'd']
// 6. 数组过滤
// 数组的过滤数组本身也提供了方法:Array.prototype.filter()
const arr9 = [1, 4, 6, 7, 8, 12];
const result = arr9.reduce((pre: number[], curr) => {
if (curr > 5) {
pre.push(curr);
}
return pre;
}, []);
console.log(result); // [6, 7, 8, 12]
/*
in 操作符:用来判断某个属性是否属于某个对象,可以是对象的直接属性,也可以是prototype继承的属性
*/
const obj = {
name: "tom", age: 12 };
console.log("name" in obj); // true
console.log("sex" in obj); // false
const arr1 = ["apple", "pear"];
console.log(0 in arr1); // true
console.log("apple" in arr1); // false
console.