javascript - 如何在js ES6中的破坏结构中传递多个参数
问题描述
我有一个元素数组,我试图做几列。
我已经阅读了有关从中解构元素的 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});
作为最终结果,我将获得基于解构结构的内部列的总和。
添加哈希:
这是我的哈希:
{
"success": true,
"leads": [
{
"id": 9,
"branch": "Accounts",
"classification": "Warm",
"theme": "Lean",
"branch_id": 3,
"classification_id": 1,
"project_id": 30,
"theme_id": 3,
"projectname": "project test",
"comment": "commenters",
"customername": "alex",
"lead1id": 2,
"lead1percent": "2.0",
"lead2id": 2,
"lead2percent": "2.0",
"lead3id": 2,
"lead3percent": "2.0",
"lead_plans": [
{
"id": 5,
"lead_id": 9,
"addcosts": "2.0",
"fee": "2.0",
"plan2": "2.0",
"plan3": "2.0",
"probability": "2.0",
"year": "2020-02-12"
}
],
"offers": [
{
"id": 5,
"lead_id": 9,
"addcosts": "2.0",
"addcostsinfo": "some info",
"days": "2020-02-12",
"decision": "good",
"decisiondate": "2020-02-12",
"fee": "2.0",
"mail": "mail goes here",
"offerdate": "2020-02-12",
"paper": "xyz"
}
]
},
{
"id": 10,
"branch": "Accounts",
"classification": "Warm",
"theme": "Lean",
"branch_id": 3,
"classification_id": 1,
"project_id": 28,
"theme_id": 3,
"projectname": "project test",
"comment": "commenters",
"customername": "alex",
"lead1id": 2,
"lead1percent": "2.0",
"lead2id": 2,
"lead2percent": "2.0",
"lead3id": 2,
"lead3percent": "2.0",
"lead_plans": [
{
"id": 6,
"lead_id": 10,
"addcosts": "2.0",
"fee": "2.0",
"plan2": "2.0",
"plan3": "2.0",
"probability": "2.0",
"year": "2020-02-12"
}
],
"offers": [
{
"id": 6,
"lead_id": 10,
"addcosts": "2.0",
"addcostsinfo": "some info",
"days": "2020-02-12",
"decision": "good",
"decisiondate": "2020-02-12",
"fee": "2.0",
"mail": "mail goes here",
"offerdate": "2020-02-12",
"paper": "xyz"
}
]
},
{
"id": 11,
"branch": "Accounts",
"classification": "Warm",
"theme": "Lean",
"branch_id": 3,
"classification_id": 1,
"project_id": 30,
"theme_id": 3,
"projectname": "project test",
"comment": "commenters",
"customername": "alex",
"lead1id": 2,
"lead1percent": "2.0",
"lead2id": 2,
"lead2percent": "2.0",
"lead3id": 2,
"lead3percent": "2.0",
"lead_plans": [
{
"id": 7,
"lead_id": 11,
"addcosts": "2.0",
"fee": "2.0",
"plan2": "2.0",
"plan3": "2.0",
"probability": "2.0",
"year": "2020-02-12"
},
{
"id": 8,
"lead_id": 11,
"addcosts": "6.0",
"fee": "5.0",
"plan2": "4.0",
"plan3": "3.0",
"probability": "6.0",
"year": "2020-02-12"
},
{
"id": 9,
"lead_id": 11,
"addcosts": "5.0",
"fee": "2.0",
"plan2": "5.0",
"plan3": "1.0",
"probability": "3.0",
"year": "2020-02-12"
}
],
"offers": [
{
"id": 7,
"lead_id": 11,
"addcosts": "2.0",
"addcostsinfo": "some info",
"days": "2020-02-12",
"decision": "good",
"decisiondate": "2020-02-12",
"fee": "2.0",
"mail": "mail goes here",
"offerdate": "2020-02-12",
"paper": "xyz"
},
{
"id": 8,
"lead_id": 11,
"addcosts": "7.0",
"addcostsinfo": "some info",
"days": "2020-02-12",
"decision": "good",
"decisiondate": "2020-02-12",
"fee": "9.0",
"mail": "mail goes here",
"offerdate": "2020-02-12",
"paper": "xyz"
},
{
"id": 9,
"lead_id": 11,
"addcosts": "8.0",
"addcostsinfo": "some info",
"days": "2020-02-12",
"decision": "good",
"decisiondate": "2020-02-12",
"fee": "7.0",
"mail": "mail goes here",
"offerdate": "2020-02-12",
"paper": "xyzas"
}
]
},
{
"id": 11,
"branch": "Accounts",
"classification": "Warm",
"theme": "Lean",
"branch_id": 3,
"classification_id": 1,
"project_id": 30,
"theme_id": 3,
"projectname": "project test",
"comment": "commenters",
"customername": "alex",
"lead1id": 2,
"lead1percent": "2.0",
"lead2id": 2,
"lead2percent": "2.0",
"lead3id": 2,
"lead3percent": "2.0",
"lead_plans": [
{
"id": 7,
"lead_id": 11,
"addcosts": "2.0",
"fee": "2.0",
"plan2": "2.0",
"plan3": "2.0",
"probability": "2.0",
"year": "2020-02-12"
},
{
"id": 8,
"lead_id": 11,
"addcosts": "6.0",
"fee": "5.0",
"plan2": "4.0",
"plan3": "3.0",
"probability": "6.0",
"year": "2020-02-12"
},
{
"id": 9,
"lead_id": 11,
"addcosts": "5.0",
"fee": "2.0",
"plan2": "5.0",
"plan3": "1.0",
"probability": "3.0",
"year": "2020-02-12"
}
],
"offers": [
{
"id": 7,
"lead_id": 11,
"addcosts": "2.0",
"addcostsinfo": "some info",
"days": "2020-02-12",
"decision": "good",
"decisiondate": "2020-02-12",
"fee": "2.0",
"mail": "mail goes here",
"offerdate": "2020-02-12",
"paper": "xyz"
},
{
"id": 8,
"lead_id": 11,
"addcosts": "7.0",
"addcostsinfo": "some info",
"days": "2020-02-12",
"decision": "good",
"decisiondate": "2020-02-12",
"fee": "9.0",
"mail": "mail goes here",
"offerdate": "2020-02-12",
"paper": "xyz"
},
{
"id": 9,
"lead_id": 11,
"addcosts": "8.0",
"addcostsinfo": "some info",
"days": "2020-02-12",
"decision": "good",
"decisiondate": "2020-02-12",
"fee": "7.0",
"mail": "mail goes here",
"offerdate": "2020-02-12",
"paper": "xyzas"
}
]
},
{
"id": 11,
"branch": "Accounts",
"classification": "Warm",
"theme": "Lean",
"branch_id": 3,
"classification_id": 1,
"project_id": 30,
"theme_id": 3,
"projectname": "project test",
"comment": "commenters",
"customername": "alex",
"lead1id": 2,
"lead1percent": "2.0",
"lead2id": 2,
"lead2percent": "2.0",
"lead3id": 2,
"lead3percent": "2.0",
"lead_plans": [
{
"id": 7,
"lead_id": 11,
"addcosts": "2.0",
"fee": "2.0",
"plan2": "2.0",
"plan3": "2.0",
"probability": "2.0",
"year": "2020-02-12"
},
{
"id": 8,
"lead_id": 11,
"addcosts": "6.0",
"fee": "5.0",
"plan2": "4.0",
"plan3": "3.0",
"probability": "6.0",
"year": "2020-02-12"
},
{
"id": 9,
"lead_id": 11,
"addcosts": "5.0",
"fee": "2.0",
"plan2": "5.0",
"plan3": "1.0",
"probability": "3.0",
"year": "2020-02-12"
}
],
"offers": [
{
"id": 7,
"lead_id": 11,
"addcosts": "2.0",
"addcostsinfo": "some info",
"days": "2020-02-12",
"decision": "good",
"decisiondate": "2020-02-12",
"fee": "2.0",
"mail": "mail goes here",
"offerdate": "2020-02-12",
"paper": "xyz"
},
{
"id": 8,
"lead_id": 11,
"addcosts": "7.0",
"addcostsinfo": "some info",
"days": "2020-02-12",
"decision": "good",
"decisiondate": "2020-02-12",
"fee": "9.0",
"mail": "mail goes here",
"offerdate": "2020-02-12",
"paper": "xyz"
},
{
"id": 9,
"lead_id": 11,
"addcosts": "8.0",
"addcostsinfo": "some info",
"days": "2020-02-12",
"decision": "good",
"decisiondate": "2020-02-12",
"fee": "7.0",
"mail": "mail goes here",
"offerdate": "2020-02-12",
"paper": "xyzas"
}
]
}
],
"message": "Projects fetched successfully"
}
目前,它对我有用,但我被迫为一份工作编写 3 个代码。
工作代码:
const probability = h.lead_plans.reduce((currentTotal, currentDau) => parseFloat((currentTotal || 0)) + parseFloat(currentDau.probability), 0)
const plan2 = h.lead_plans.reduce((currentTotal, currentDau) => parseFloat((currentTotal || 0)) + parseFloat(currentDau.plan2), 0)
const plan3 = h.lead_plans.reduce((currentTotal, currentDau) => parseFloat((currentTotal || 0)) + parseFloat(currentDau.plan3), 0)
解决方案
以下是代码的工作方式。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)
推荐阅读
- sql-server - SQL Server 表中不可见的空行
- python - 更新 python 加密会导致错误并且脚本不起作用
- scikit-learn - 以与用于训练 RF 模型的编码数据相同的格式编码新数据
- python - Kivy:滚动视图在更改小部件大小时未激活
- java - 有没有办法在正则表达式中以不同方式识别相同的字符
- android - 如何在 Xamarin 中使用无头 WebView
- python - 如何创建一个数据框,其中值来自具有许多变量的函数的结果?熊猫
- asp.net-core - 我们如何在 Cosmosdb(sqlapi) 中使用 Asp.net Core Identity
- php - php数据库连接不能从wordpress函数工作
- salesforce - Salesforce:如何使用顶点代码或公式在日期字段中获取周数(检查第 53 周)