前端基础(四)- 数组和对象方法

数组的方法

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.
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值