问题描述:

如何在 array.reduce 中返回一个对象?

例如:我想找到给定日期数据集的最低点。(我使用货币 API 作为一个有趣的数据集来玩)。我得到的数据是一个对象数组。所以我每天都在使用 reduce 来迭代并找到最低的低点。

const lowestLow = historialCandlesFloatData.reduce((lowestLow,currentDay) => {
        if(currentDay.l < lowestLow.l){
             return lowestLow = currentDay;
        }else return lowestLow;   

        这很好用,但我还需要返回的对象的索引为最低值。现在我知道你可以使用索引作为reduce的一部分,我可以控制台记录最低低的索引是什么,但我不知道如何将它与低作为对象一起返回?

    我可以只使用一个 forEach,它似乎工作正常,但这似乎不是最好的方法,我真的很想知道!

const findLow = ()=>{
    let currentDayLow = 2;
    let dataIndex = 0;
    let datavalue = 0;
        historialCandlesFloatData.forEach((day)=>{
            if(day.l < currentDayLow){
                currentDayLow = day.l;
                datavalue = dataIndex;   
            dataIndex ++;   
    return {
        lowestLow: currentDayLow,
        indexValue: datavalue,

解决思路一:

        要做到这一点reduce,您需要使用“累加器”来传递一个带有值和索引的对象。(呃,或者只是返回索引然后使用它来获取元素,如trincot 所示。)例如:

const lowestLow = historialCandlesFloatData.reduce((lowestLow, currentDay, index) => {
    return !lowestLow || currentDay.l < lowestLow.entry.l ? { entry: currentDay, index } : lowestLow;
}, null)

        或者,您可以通过向累加器添加索引来使累加器成为数组中对象的增强版本:

const lowestLow = historialCandlesFloatData.reduce((lowestLow, currentDay, index) => {
    return !lowestLow || currentDay.l < lowestLow.l ? { ...currentDay, index } : lowestLow;
}, null);

        但我不喜欢使用reducead hoc 函数,尤其是因为忘记提供种子值(必要时)、忘记在所有代码路径上执行等很容易绊倒它return。除非你'重新使用预定义的、可重用的 reducer 函数进行函数式编程,我更喜欢简单的循环:        

let lowestLow = null;
let lowestIndex;
for (let index = 0; index < historialCandlesFloatData.length; ++index) {
    const entry = historialCandlesFloatData[index];
    if (!lowestLow || entry.l < lowestLow.l) {
        lowestLow = entry;
        lowestIndex = index;

    是的,在这种情况下,它的代码更多,但您可能会发现它更清晰和/或更不容易出错,尤其是在您刚开始的时候。

解决思路二:

    为什么不使用 JavaScript 的扩展运算符向对象添加新属性...?例如,像这样:

const lowestLow = historialCandlesFloatData.reduce((lowestLow, currentDay, idx) => {
        if(currentDay.l < lowestLow.l){
             return {
                 ...currentDay,
                 idx: idx,
        } else {
             return lowestLow;
// Initial value
{ l: historialCandlesFloatData[0].l + 1 }
// Now you can access the index like so
const index = lowestLow.idx;

解决思路三(这是解决小编问题的思路)

        以上仅为部分解决思路介绍,请查看全部内容,请添加下方公众号后回复001,即可查看。公众号有许多评分最高的编程书籍和其它实用工具,绝对好用,可以放心使用

        如果您觉得有帮助,可以关注公众号——定期发布有用的资讯和资源​

在平时的项目里,相信不少小伙伴应该都会碰到 Uncaught TypeError: Cannot read property 'name' of undefined 这种错误吧?按照正常的简约写法,直接获取嵌套属性的值,一旦间甚至刚开始的某个值就是 undefined,控制台会报错,渲染模板也会直接失败。那么,有没有方法可以避免这种情况的发生呢? 最笨的逐级&amp;&amp; 为了避免...
构造函数主要是一种用于生成对象的饼干模具,这些对象具有默认属性和属性方法,它可以创建多个共享特定特性和行为的对象。 构造函数只是一个函数,但当函数遇到了new,就发生了一些微妙的关系,它会将该函数的this值设置为正在构建的新对象,并且默认返回新创建的对象。 什么是对象实例? 在js,大多数值(不包括原始值)都涉及正在被创建的对象,或者是从构造...
var url = 'www.imooc.com?name=xiaodangao&age=22&sex=0&phone=19023271580'; function fetchData(url) { var obj = {}; var temp; var paramsGroup = url.split('?')[1]; //name=QinYanFei&age=22&sex=0&phone=13083771680 var paramsObj = pa
最近使用开发的过程出现了一个小问题,顺便记录一下原因和方法--返回对象     JS逻辑&&和||运算数可以是任何类型的,不止是布尔型的。布尔型绝对简略,本文只针对非布尔型或者二者都有的情况作说明.     对于如下实例: var T = {}; function test() { var height = 0; var re = T || 100;
数组用于在变量存储多个值。 本篇文章作为Array对象的温习笔记,包含3个数组属性和30个数组方法。 文章示例MZPP为 民族品牌 拼音首写字母大写。 一、数组属性constructor 返回数组对象的原型函数。 const MZPPS = ['HUAWEI', 'BYD', 'MAOTAI'] console.log(MZPPS.constructor) // ƒ Array(...
数组对象reduce方法 const array1 = new Array(1, 2, 3, 4); const array2 = new Array(3, 4, 5, 6); // 求 array1 所有的元素的和 // const result = array1.reduce(function (sum, value, in...
reduce() 方法接收一个函数作为累加器,数组的每个值(从左到右)开始缩减,最终计算为一个值。 reduce() 可以作为一个高阶函数,用于函数的 compose reduce() 对于空数组是不会执行回调函数的 浏览器支持 支持谷歌、火狐、ie9以上等主流浏览器 array.reduce(function(p...
Array.prototype.reduce() 是数组最强大的方法之一,也是 JavaScript 函数式编程一个吸引人的特性。但不幸的是,我发现很多朋友不习惯使用它。今天请让我详细介绍一下这个方法,希望对你有帮助。这是 reduce 的基本用法: reduce是数组原型对象上的一个方法,可以帮助我们操作数组。它将另一个函数作为其参数,可以称为reducer。reducer 有两个参数。第一个参数 param1 是最后一次 reducer 运行的结果。如果这是第一次运行 reducer,则 par
.reduce() 是 JavaScript 的一个数组方法,用于将数组的每个元素依次执行指定的操作,最终将它们合并成一个值。reduce() 方法接受两个参数:一个回调函数和一个初始值。 回调函数有四个参数:accumulator (累加器),currentValue (当前值),currentIndex (当前索引)和 array (当前数组)。回调函数返回一个累加值,它将被传递给下一次执行回调函数时作为累加器的值。 .reduce() 方法从左到右遍历数组,对数组的每个元素都应用一遍回调函数,并将计算得到的累加值传递给下一个元素。最终返回的是一个合并后的值。 以下是 .reduce() 方法的基本原理: 1. 传入一个初始值作为累加器; 2. 对于数组的每一个元素,执行回调函数并将累加器与当前元素作为参数传递进去; 3. 回调函数返回一个新的累加器值,将其传递给下一次执行回调函数时使用; 4. 最终返回最后一次执行回调函数得到的累加器值。 例如,以下代码将数组的所有元素相加: const arr = [1, 2, 3, 4]; const sum = arr.reduce((accumulator, currentValue) => accumulator + currentValue, 0); console.log(sum); // 输出 10 初始值为 0,回调函数将累加器和当前值相加,最终返回所有元素的和。