为了账号安全,请及时绑定邮箱和手机立即绑定

如何在js ES6中的破坏结构中传递多个参数

如何在js ES6中的破坏结构中传递多个参数

梦里花落0921 2022-07-21 11:03:16
我有一个元素数组,我试图做几列。我已经阅读了有关从中解构元素的 reduce 方法。但问题是我无法在其中传递多个参数。另外,它不识别其中传递的元素。这是我的代码:const prob = h.lead_plans.reduce((currentTotal, currentDau) => {                                            console.log(currentDau.probability);                                            return  ({'probability'} = {probability: ((currentTotal || 0) + currentDau.probability)})                                        }, {probability: 0});预期代码:const prob = h.lead_plans.reduce((currentTotal, currentDau) => {                                            return  ({probability,plan2} = {                                                probability: ((currentTotal || 0) + currentDau.probability),                                                plan2: ((currentTotal || 0) + currentDau.plan2),                                            })                                        }, {probability: 0, plan2: 0});作为最终结果,我将获得基于解构结构的内部列的总和。
查看完整描述

1 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

以下是代码的工作方式。currentTotal第一次运行的值是 reduce 函数的第二个参数,而Array#reduce(function,initialValue)不是{probability: 0, plan2: 0}一个数字。


所以,你不需要做任何对象解构,你只需要使用累加器对你想要的对象的各个键求和,然后返回这些新值。然后您的最终结果将与您用于初始值的类型相同。


这会将概率和 plan2 值转换为数字,以便能够正确地求和。


const h = {

  lead_plans: [{

    probability: '2.2',

    plan2: '5.2'

  }, {

    probability: '7.8',

    plan2: '3.1'

  }, {

    probability: '1.8',

    plan2: '2.3'

  }]

}

const result = h.lead_plans.reduce(

  (accumulator, currentDau) => {

    return {

      probability: accumulator.probability + parseFloat((currentDau.probability || 0)),

      plan2: accumulator.plan2 + parseFloat((currentDau.plan2 || 0)),

    };

  }, {

    probability: 0,

    plan2: 0

  }

);

console.log(result);

下面是一个示例,说明如何制作一个更可重用的 reducer 来汇总对象中的所有条目:


请注意,这是将所有键转换为数字,因此如果存在不是数字的值,它们将是 NaN。


const h = {

  lead_plans: [{

    probability: '2.5',

    plan2: 5

  }, {

    probability: 7,

    plan2: 3

  }, {

    probability: 1,

    plan2: 2

  }]

}

const reducerSumAll = (accumulator, object) => {

  // Ensure there are no accidental mutations

  const current = { ...accumulator };

  for (const key of Object.keys(object)) {

    // Make sure we are only accumulating the number types.

    current[key] = parseFloat(current[key]||0) + parseFloat(object[key]||0);

  }

  return current;

};

const result = h.lead_plans.reduce(reducerSumAll)

console.log(result)


查看完整回答
反对 回复 2022-07-21
  • 1 回答
  • 0 关注
  • 82 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信