当前位置: 首页 > news >正文

JS - 重点JS方法温故而知新

一.call()、apply()、bind()

显式绑定:通过call()、apply()、bind()方法把this指向指定参数的对象,叫做显式绑定。

function sayHi(){
    console.log('Hello,', this.name);
}
var person = {
    name: 'YvetteLau',
    sayHi: sayHi
}
 var name = 'Wiliam';
 var Hi = person.sayHi;
 Hi.call(person); //Hello, YvetteLau
  • 三个方法之间的区别:
// 接收1个参数
function sayHi(message) {
    console.log(message + ',', this.name);
}
var person = {
    name: 'YvetteLau'
};
var name = 'Wiliam';// 定义全局变量 name

sayHi.call(person, 'Hello');// Hello, YvetteLau

sayHi.apply(person, ['Hi']);// Hi, YvetteLau

var newSayHi = sayHi.bind(person, 'Howdy');
newSayHi(); //Howdy, YvetteLau
// 接收多个参数
function sayHi(message, emotion) {
    console.log(message + ',', this.name, emotion);
}
var person = {
    name: 'YvetteLau'
};
var name = 'Wiliam';

sayHi.call(person, 'Hello', 'happily');// Hello, YvetteLau happily

sayHi.apply(person, ['Hi', 'cheerfully']);// Hi, YvetteLau cheerfully

var newSayHi = sayHi.bind(person, 'Howdy', 'excitedly');
newSayHi();// Howdy, YvetteLau excitedly

二.reduce

reduce 是 JavaScript 数组对象的一个非常强大且常用的方法,用于对数组中的每个元素执行一个提供的函数,并将结果汇总为单个值。下面为你详细解释其语法及各参数的含义。

语法结构

arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])

参数详解

1. callback(必需)

callback 是一个用于处理数组中每个元素的函数,它可以接收四个参数,不过通常只需要使用前两个参数,后两个参数是可选的:

  • accumulator:累加器,它保存着上一次调用 callback 函数的返回值。在第一次调用 callback 时,如果提供了 initialValueaccumulator 就等于 initialValue;如果没有提供 initialValueaccumulator 就等于数组的第一个元素。
  • currentValue:当前正在处理的数组元素。
  • index(可选):当前正在处理的数组元素的索引。
  • array(可选):调用 reduce 方法的数组本身。
2. initialValue(可选)

initialValue 作为第一次调用 callback 函数时的 accumulator 的初始值。如果没有提供 initialValue,则数组的第一个元素会被用作初始的 accumulator,并且 callback 函数会从数组的第二个元素开始执行。

使用示例

示例 1:数组元素求和,不提供 initialValue
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((accumulator, currentValue) => {
    return accumulator + currentValue;
});
console.log(sum); 

在这个例子中,没有提供 initialValue,所以 accumulator 初始为数组的第一个元素 1currentValue 从第二个元素 2 开始。第一次调用 callback 时,accumulator1currentValue2,返回 1 + 2 = 3;第二次调用时,accumulator3currentValue3,返回 3 + 3 = 6,以此类推,最终得到数组元素的总和 15

示例 2:数组元素求和,提供 initialValue
const numbers = [1, 2, 3, 4, 5];
const sumWithInitial = numbers.reduce((accumulator, currentValue) => {
    return accumulator + currentValue;
}, 0);
console.log(sumWithInitial); 

这里提供了 initialValue0,所以 accumulator 初始为 0currentValue 从数组的第一个元素 1 开始。第一次调用 callback 时,accumulator0currentValue1,返回 0 + 1 = 1;第二次调用时,accumulator1currentValue2,返回 1 + 2 = 3,最终同样得到总和 15

示例 3:统计数组中每个元素的出现次数
const fruits = ['apple', 'banana', 'apple', 'cherry', 'banana', 'apple'];
const fruitCount = fruits.reduce((accumulator, currentValue) => {
    if (!accumulator[currentValue]) {
        accumulator[currentValue] = 1;
    } else {
        accumulator[currentValue]++;
    }
    return accumulator;
}, {});
console.log(fruitCount); 

在这个示例中,提供了 initialValue 为一个空对象 {}accumulator 初始为 {}。遍历数组时,检查每个元素是否已经在 accumulator 对象中,如果不在则初始化为 1,如果存在则将其对应的值加 1,最终得到每个元素的出现次数统计 { apple: 3, banana: 2, cherry: 1 }

注意事项

  • 如果数组为空且没有提供 initialValuereduce 方法会抛出 TypeError 错误。
  • 如果数组只有一个元素且没有提供 initialValue,或者数组为空但提供了 initialValue,则 reduce 方法不会执行 callback 函数,而是直接返回该元素或 initialValue

通过这些示例,你应该能更好地理解 reduce 方法的语法和使用方式了。

http://www.dtcms.com/a/73173.html

相关文章:

  • ROS2 系统架构
  • Linux调度器 --- 负载均衡的存在的问题
  • AI 助力医学统计:复杂临床数据处理的 “救星”
  • 【Oracle】19c数据库控制文件多路径配置
  • Docker 容器指标搜集工具cAdvisor
  • 一款基于Python的从常规文档里提取图片的简单工具开发方案
  • 用 Python 进行比特币数据分析:从入门到实战
  • k8s 配置两个deployment主机级别互斥部署
  • 硬件驱动——51单片机:寄存器、LED、动态数码管
  • Google Cloud Run 如何实现无服务器(Serverless)部署?
  • 受控组件非受控组件
  • 论文阅读:Deep Hybrid Camera Deblurring for Smartphone Cameras
  • 【工作记录】pytest使用总结
  • 深度学习中的并行策略:数据并行、流水并行与张量并行
  • DR-CAN 卡尔曼滤波笔记
  • Python库安装报错解决思路以及机器学习环境配置详细方案
  • 机器学习中说的正向传递和反向传递是什么意思
  • NFS网络文件共享服务
  • mysql-8.0.40-1.el7.x86_64.rpm Linux MySQL 保姆级详细安装教程(2025版)
  • 【技术报告】谷歌开源多模态大模型 Gemma-3
  • 《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(59)定风珠稳调度 - 任务调度器(贪心桶思想)
  • 鸿蒙开发:自定义一个搜索模版
  • lspci命令
  • ctfshow-web-351-360-ssrf-wp
  • PyTorch使用-张量的创建
  • K8s集群的环境部署
  • ⭐算法OJ⭐两数之和【哈希表】(C++ 实现)Two Sum
  • 三. Zabbix安装
  • ​详细介绍 SetWindowPos() 函数
  • 基于 SSE 和 WebSocket 的在线文本实时传输工具