首页 > 其他分享 >数组的reduce 的使用和扁平化处理

数组的reduce 的使用和扁平化处理

时间:2024-03-19 16:59:59浏览次数:20  
标签:index return 扁平化 reduce item result 数组 100

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    // 数组的reduce / reduceRight迭代方法
    // reduce可以再迭代数组每一项的同时,实现结果的累积!在callback函数中
    //   + result: 存储的是上一轮处理的结果「也可能是数组第一项的值」
    //   + item: 当前选代这一项
    //   + index: 迭代这一项的索引
    // 函数返回的值作为本轮处理的结果!!整个循环迭代结束后,把最后一轮的返回值,作为reduce执行的总结果!!
    // reduce中传递的第二个参数,是为了给result赋值初始值的!
    let arr = [10, 20, 30, 40]

    let res = arr.reduce((result, item, index) => {
      //第一轮:result数组第一项的值10 数组从第二项开始迭代:item=20 index=1 返回30
      //第二轮:result是第一轮返回的结果30 item=30 index=2 返回60
      // 第三轮:result是第二轮返回的结果60 item=40 index=3返回100
      return result + item
    })
    // let res = arr.reduce((result, item, index) => {
    //   第一轮:result是100 数组从第一项开始迭代:item=10 index=0 返回110
    //   第二轮:result是110 item=20 index=1 返回130
    //   ...
    //   return result + item
    // },100)
    // console.log(res)


    const a = x => x + 10
    const b = x => x - 10
    const c = x => x * 10
    const d = x => x / 10
    // 需求给定一个值100,依次执行上面的四个函数返回结果要怎么实现
    const compose = function compose (...funcs) {
      //funcs -> [a,b,c,d]
        funcs.forEach(item => {
        if (typeof item !== "function") {
          throw new TypeError('传递进来的值必须为函数')
        }
      })
      return function handle (x) {
        //x=>100
        let len = funcs.length
        if (len === 0) return x
        if (len === 1) return funcs[0](x)
        return funcs.reduce((result, func, index) => {
          //第-轮:result=x(100)func=a index=0 返回 a(100)=>110
          //第二轮:result=110 func=b index=1 返回 b(110)=>100
          // ...
          return func(result)
        }, x)
      }

    }
    console.log(compose(a, b, c, d)(100)); 
  </script>
</body>

</html>

标签:index,return,扁平化,reduce,item,result,数组,100
From: https://blog.csdn.net/weixin_44761131/article/details/136847503

相关文章

  • java数据结构与算法刷题-----LeetCode1005. K 次取反后最大化的数组和(这就不是简单题)
    java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846卷来卷去,把简单题都卷成中等题了文章目录1.排序后从小到大取负2.hash表从小到大排序,省掉排序(这就是为什......
  • 1793.好子数组的最大分数(力扣每日一题)
    1793.好子数组的最大分数给你一个整数数组nums(下标从0开始)和一个整数k。一个子数组(i,j)的分数定义为min(nums[i],nums[i+1],...,nums[j])*(j-i+1)。一个好子数组的两个端点下标需要满足i<=k<=j。请你返回好子数组的最大可能分数。 示例......
  • 06_C++多维数组
    多维数组,数组指针在二维数组上的应用。#include<iostream>#include<stdio.h>usingnamespacestd;intmain(){intarr[3][5]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}};int(*p)[5]=arr;cout<<"*p:"<<*p<<endl......
  • 【LeetCode 1793 】好子数组的最高分数
    题目描述原题链接:LeetCode.1793好子数组的最高分数解题思路分数由子数组最小值和长度决定,而且确定了子数组必须包含nums[k]的值;从k位置分别向左向右找更小值就是每个子数组的最小值,左右两端边界下标也就确认了子数组长度;直观朴素的解法是利用单调栈将向左向右分别严格递......
  • 238. 除自身以外数组的乘积(中)
    目录题目题解:两遍前缀和题目给你一个整数数组nums,返回数组answer,其中answer[i]等于nums中除nums[i]之外其余各元素的乘积。题目数据保证数组nums之中任意元素的全部前缀元素和后缀的乘积都在32位整数范围内。请不要使用除法,且在O(n)时间复杂度内完成此题......
  • 303. 区域和检索 - 数组不可变
    目录题目前缀和题目给定一个整数数组nums,处理以下类型的多个查询:计算索引left和right(包含left和right)之间的nums元素的和,其中left<=right实现NumArray类:NumArray(int[]nums)使用数组nums初始化对象intsumRange(inti,intj)返回数组nums中索引......
  • 重载自增++运算符预算符完成数组扩容
    今天突发奇想,我们平时的++运算符基本都只能自增数字,那我能不能实现一个当用户自增数组时也能完成数组增加一项呢(假设你不会使用c++的变长数组或者vector!)下面就是我的实现方法,各位大佬多多指教哦!比如说gyf大佬和yzs大佬以及lxb大佬?//重载++运算符扩容数组#include<......
  • 一维数组_ 石头剪刀布(老是感觉有错误的地方,请指正)
    任务描述石头剪刀布是常见的猜拳游戏。石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。一天,小A和小B正好在玩石头剪刀布。已知他们的出拳都是有周期性规律的,比如:“石头-布-石头-剪刀-石头-布-石头-剪刀……”,就是以“石头-布-石头-剪刀”为周期不断循环的。请问......
  • 209. 长度最小的子数组
    209.长度最小的子数组https://leetcode.cn/problems/minimum-size-subarray-sum/?envType=study-plan-v2&envId=top-interview-150 思路三种方法中,具有最优时间复杂度的方案滑动窗口设置start=0end=0执行循环:end向后探测,直到sum值大于等于target,更新最优长度......
  • JavaScript学习笔记5: 对象 - 数组Array
    JS对象-数组Array数组的定义及特性数组定义<script>//数组定义方式1,赋值给变量vararr1=newArray(1,2,3);//数组定义方式2,初始化数组vararr2=[4,5,6];</script>JS数组长度可变<script>vararr2=[4,5,6];//数组初始长度为3......