【问题标题】:destructuring inside a reduce method在 reduce 方法中进行解构
【发布时间】:2020-08-12 07:49:44
【问题描述】:

我想知道是否可以直接在 JS 的 reduce 方法中进行解构。我正在尝试做这样的事情:

使用这个二维数组:

currency = [
    ["PENNY", 0.01],
    ["NICKEL", 0.05],
    ["DIME", 0.01],
    ["QUARTER", 0.25],
    ["ONE", 1],
    ["FIVE", 5],
    ["TEN", 10],
    ["TWENTY", 20],
    ["ONE HUNDRED", 100]
];

我想得到所有金额的总和。我的意思是这样的:

const [curr, amount] = change;

return change.reduce(amount => amount + b);

直接在 reduce 方法的回调中解构货币数组会更好。

【问题讨论】:

  • 考虑将解构放在数组映射中?
  • 嗯,是的,如果您想在回调中运行代码,并且可能有 change 变量可用,则必须将代码放入回调中。

标签: javascript ecmascript-6 reduce destructuring


【解决方案1】:

如果您想合计金额:

const sum = currency.reduce((total, [_, amount]) => total + amount, 0);

每个子数组都被解构为面额名称和金额。

【讨论】:

  • 或者甚至:const sum = currency.reduce((total, [, amount]) => total + amount);,几乎相同,但没有初始值,只是在没有_的数组中省略第一个元素
  • @Kyr 当然,这对我来说总是很奇怪,但这是我个人的问题:)
  • 同意,有点,但比警告“未使用的变量_”更好
  • 我养成了使用 Erlang 的 _ 的习惯,它明确支持“我不会使用这个”变量名。
【解决方案2】:

有很多变种。在不改变数据结构的情况下:

return currency.map(element => element[1]).reduce((acc, curr) => acc + curr);

【讨论】:

    【解决方案3】:

    let currency = [
        ["PENNY", 0.01],
        ["NICKEL", 0.05],
        ["DIME", 0.01],
        ["QUARTER", 0.25],
        ["ONE", 1],
        ["FIVE", 5],
        ["TEN", 10],
        ["TWENTY", 20],
        ["ONE HUNDRED", 100]
    ];
    console.log(currency.reduce((acc, cur) => {return acc + cur[1]},0))

    【讨论】:

      猜你喜欢
      • 2021-01-08
      • 2022-01-20
      • 1970-01-01
      • 2018-05-09
      • 2018-06-15
      • 2019-05-21
      • 1970-01-01
      • 2015-05-08
      • 1970-01-01
      相关资源
      最近更新 更多