首页 > 其他分享 >学习一下Array.reduce函数的使用

学习一下Array.reduce函数的使用

时间:2024-09-28 23:03:32浏览次数:7  
标签:currentValue const 函数 age reduce accumulator Array name

今天面试遇到一个问题,如下:

实现一个函数,把 [{ name: "Alice", age: 10 }, { name: "Bob", age: 20 }] 转换成 { Alice: 10, Bob: 20 }

然后我用for循环加Object.values的方法实现了,面试这时候问,能不能用reduce实现?答,当然是可以的,可惜我对reduce使用的并不熟练,现在来学习一下。

 

下面是MDN给出的定义:

reduce方法对数组中的每个元素按按顺序执行一个提供的reducer函数,每一次运行reducer函数会将先前元素的计算结果作为参数传入,最后将其结果汇总为单个元素返回。

它的第一个参数是一个函数,第二个参数是初始值。如果不传入第二个参数,那么数组索引为0的元素将被作为初始值,迭代器将从第二个元素开始执行。

reducer可以理解为“归约”:在计算机科学和编程中,特别是在函数式编程里,reducer 是一种特定类型的函数,它用于将集合中的元素通过某种操作累积起来得到一个单一的结果。这个过程通常称为“归约”(reduce)

 

 下面是面试题的答案

function transformArrayToObject(arr) {
  return arr.reduce((accumulator, currentValue) => {
    // 使用当前元素的name作为键,age作为值添加到累加器对象中
    accumulator[currentValue.name] = currentValue.age;
    return accumulator;
  }, {});  // 初始值为一个空对象
}

// 测试数据
const array = [
  { name: "Alice", age: 10 },
  { name: "Bob", age: 20 }
];

// 调用函数并打印结果
const result = transformArrayToObject(array);
console.log(result);  // 输出: { Alice: 10, Bob: 20 }

 

使用场景1:数组求和

const array1 = [1, 2, 3, 4];

// 0 + 1 + 2 + 3 + 4
const initialValue = 0;
const sumWithInitial = array1.reduce(
  (accumulator, currentValue) => accumulator + currentValue,
  initialValue,
);

console.log(sumWithInitial);
// Expected output: 10

 

 使用场景2:展开嵌套数组

const flattened = [[1, 2], [3, 4], [5, 6]].reduce((accumulator, currentValue) => accumulator.concat(currentValue), [])

 

 

 

 

标签:currentValue,const,函数,age,reduce,accumulator,Array,name
From: https://www.cnblogs.com/yaoyu7/p/18438408

相关文章

  • 从汇编视角解析函数调用中的堆栈运作
    引言汇编语言是计算机硬件操作的最直接表达方式,通过汇编代码可以深入理解计算机底层的工作机制。本文将以一个简单的C语言代码为例,深入分析其对应的汇编代码中的堆栈变化,探讨计算机在执行过程中如何通过堆栈来进行函数调用、参数传递和结果返回。C语言代码与汇编代码概述我们......
  • 【C语言】字符函数和字符串函数(1)
    文章目录一、字符分类函数二、字符转换函数三、strlen的使用和模拟实现四、strcpy的使用和模拟实现五、strcat的使用和模拟实现六、strcmp的使用和模拟实现一、字符分类函数  C语⾔中有⼀系列的函数是专⻔做字符分类的,也就是⼀个字符是属于什么类型的字符的,这些......
  • 友元运算符重载函数
    目录1.定义友元运算符重载函数的语法形式2.双目运算符重载3.单目运算符重载1.定义友元运算符重载函数的语法形式        (1)在类的内部,定义友元运算符重载函数的格式如下:friend函数类型operator运算符(形参表){函数体}        (2)在类中,声明友......
  • 【Kotlin 集合概述】可变参数vararg、中缀函数infix以及解构声明(二十)
    导读大纲1.1使用集合:vararg、infix调用和解构声明1.1.1扩展Java集合API1.1.2vararg:接受任意数量参数的函数1.1.3处理pairs:Infix调用和解构声明1.1使用集合:vararg、infix调用和解构声明本节将介绍Kotlin标准库中用于处理集合的一些函数同时......
  • Python函数的魔法:定义与调用的艺术
    引言:你是否曾被代码困住?想象一下,你正在编写一个复杂的程序,突然间,代码的逻辑变得混乱不堪,像是一团乱麻。你是否曾经想过,为什么有些代码看起来如此简洁,而有些却让人头疼不已?答案往往在于函数的使用。函数不仅是代码的“魔法师”,更是我们编程旅程中的得力助手。在这篇文章中,我们......
  • C++ day02(函数、类和对象、封装、构造函数、析构函数)
    目录【1】函数1》内联函数inline 2》函数重载overload  3》函数的参数默认(缺省)值 4》哑元函数【2】类和对象1》类的定义 2》创建对象 【3】封装 【4】构造函数constructor1》基础使用2》构造初始化列表 3》构造函数的调用方式 4》拷贝构造函数1>概......
  • YOLOv10改进策略【损失函数篇】| Shape-IoU:考虑边界框形状和尺度的更精确度量
    一、本文介绍本文记录的是改进YOLOv10的损失函数,将其替换成Shape-IoU。现有边界框回归方法通常考虑真实GT(GroundTruth)框与预测框之间的几何关系,通过边界框的相对位置和形状计算损失,但忽略了边界框本身的形状和尺度等固有属性对边界框回归的影响。为了弥补现有研究的不足,Sh......
  • 字符函数和字符串函数
    字符函数和字符串函数字符分类函数大家知道字符是分为很多种类型的就比如说’a’‘1’'A’等等,所以我们需要一种函数来完成字符函数的分类这就是字符分类函数函数需要包含头文件<ctype.h>函数的运行规则是:如果符合下列参数就返回真inscntrl(控制任何字节)isspace(空白......
  • Day4 C++(运算符重载,模板与容器)(友元函数,运算符重载,赋值运算符,string字符串类,模板)
    1.友元friend1.1概念(掌握)定义:类实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,仅能通过类的成员函数才能读写。如果数据成员定义为公共的,则又破坏了封装性。但是某些情况下,需要频繁读写类的成员,特别是在对某些成员函数多次调用时,由于参数传递、类型检查和安全......
  • 要求实现一个函数 DoubleToStr(double a,int b,char * str),将参数 a 转化为字符串 str
    sprintf函数:sprintf(str,"%.*f",b,a);:sprintf是一个格式化输出函数,类似于printf,但它将输出写入到字符串中而不是标准输出。"%.*f":#include<stdio.h>//将双精度浮点数a转换为字符串str,小数点后保留b位voidDoubleToStr(doublea,intb,char*str){  //......