javascript - 有效地求和不同的值
问题描述
我有一个包含这样的对象的数组:
[
{
"id": 91,
"factor": 2,
"title": "Test Product",
"price": 50,
"interval": 1,
"setup": 0,
"optional": false
},
{
"id": 92,
"factor": 1,
"title": "Another Test Product",
"price": 95,
"interval": 1,
"setup": 99,
"optional": true
},
{
"id": 93,
"factor": 1,
"title": "Just Another Test Product",
"price": 12,
"interval": 1,
"setup": 0,
"optional": false
}
]
好的 - 现在我想创建一个总和:
- 设置(总计)
- 价格(总计)
- 所有产品的价格区间(按 1、2、3、4 分组,...)
现在我为每个任务使用计算值:
setupTotal: function () {
return this.products.reduce ((acc, product) => acc + (parseFloat (product.setup) * parseFloat (product.factor)), 0);
},
和
monthlyCostsTotal: function () {
let sum = 0;
this.products.forEach (function (product) {
if (product.interval == 1) {
sum += (parseFloat (product.price) * parseFloat (product.factor));
}
});
return sum;
},
和
setupOptional: function () {
let sum = 0;
this.products.forEach (function (product) {
if (product.optional) {
sum += (parseFloat (product.setup) * parseFloat (product.factor));
}
});
return sum;
},
但这当然不是最佳的,因为我一遍又一遍地循环遍历数组。
所以我的问题是:如何创建一种更有效的方法来对值求和:
- 总价
- 价格(仅可选)
- 设置总计
- 设置(仅可选)
- 区间价格
解决方案
您可以根据需要取一个对象并求和。
var data = [{ id: 91, factor: 2, title: "Test Product", price: 50, interval: 1, setup: 0, optional: false }, { id: 92, factor: 1, title: "Another Test Product", price: 95, interval: 1, setup: 99, optional: true }, { id: 93, factor: 1, title: "Just Another Test Product", price: 12, interval: 1, setup: 0, optional: false }],
result = data.reduce((r, { factor, price, interval, setup, optional }) => {
r.price += factor * price;
r.setup += factor * setup;
if (optional) {
r.price_optional += factor * price;
r.setup_optional += factor * setup;
}
r.interval[interval] = (r.interval[interval] || 0) + factor * price;
return r;
}, { price: 0, price_optional: 0, setup: 0, setup_optional: 0, interval: {} });
console.log(result);
推荐阅读
- excel - 寻找 <>VBA <>复制<> 粘贴<>特定数据
- c++ - 在测量代码的运行时,我将如何使用执行代码来求解矩阵?
- php - WooCommerce 添加到购物车动态创建的产品变体
- react-native - iOS ReactNative 构建在 M1 mac 上失败
- python - 如何将此处的地图与破折号集成?
- python - SyntaxError: invalid syntax .. 在 Python 中的 f 字符串中出现错误
- c# - 我如何尝试刷新网页的 div?
- r - 如何在ggplot RMarkdown中使用右键复制绘图
- gradle - JAVAFX 环境变量在 build.gradle.kts 中返回 null
- excel - 如何从 excel 中独特地填充 vba 组合框?