javascript - 获取对象数组,在对象中查找嵌套数组,计算 TotalAmount 并添加回原始对象
问题描述
到目前为止,这是我对对象所做的更复杂的任务之一,我一直在思考如何做到这一点,或者是否有可能。
假设我有一个看起来像这样的对象数组 -
[
{
"id": "5555",
"title": "Invoice",
"amount": 2,
"address": "12",
"items": [
{
"title": "foobar",
"amount": 2,
"quantity": 1,
"discount": 0,
"taxes": [
{
"rate": 10,
"name": "tax"
}
]
}
]
}
]
我需要拿走这个东西。乘以金额*数量,然后乘以税收。所以(金额*数量)*税。然后当我得到这个答案时,将它添加回原来的对象,就像这样 -
[
{
"id": "5555",
"title": "Invoice",
"amount": 2,
"address": "12",
"items": [
{
"title": "foobar",
"amount": "2.2",
"tax": ".2"
}
]
}
]
我相信做到这一点的方法是使用 .map() 函数,但是我正在努力解决如何获得 A。如何计算并将其添加回原始金额以获得总金额。B. 一旦我有了这个添加完成的总量,如何将新的 Items 数组添加回原始对象。
到目前为止我所拥有的以及我陷入困境的地方 -
var initialArr = input.testArr;
const newArr = initialArr.map(invoice => {
return invoice.items;
});
const calcArr = newArr.map(items => {
return {
totalAmount : (newArr.amount * newArr.quantity)
}
});
console.log(calcArr);
totalAmount 出现为空,一旦我有了这个总额,我仍然需要将金额乘以税率,然后将其添加回 totalAmount,然后将这个已完成的对象添加回。
解决方案
看起来它应该相对简单。遍历每个对象并items
用 重新分配其数组属性.map
。从每个子项中取出金额、标题和税金,通过展平taxes
数组中的所有税金来计算税金金额,然后返回一个包含税金金额的新对象,并将税金金额添加到原始金额:
const input = [
{
"id": "5555",
"title": "Invoice",
"amount": 2,
"address": "12",
"items": [
{
"title": "foobar",
"amount": 2,
"quantity": 1,
"discount": 0,
"taxes": [
{
"rate": 10,
"name": "tax"
}
]
}
]
}
];
for (const obj of input) {
obj.items = obj.items.map(({
amount,
title,
taxes
}) => {
const totalTaxPercent = taxes.reduce((a, b) => a + b.rate, 0);
const tax = (totalTaxPercent / 100) * amount;
return {
title,
amount: String(amount + tax),
tax: String(tax),
};
});
}
console.log(input);
推荐阅读
- vb.net - 日期时间算术运算
- javascript - 我们如何使用 now() 函数计算传送带在节点红色中每次启动和停止之间的运行时间?
- python-3.x - 如何解决“ValueError:检查目标时出错:预期dense_20的形状为(24,)但数组的形状为(1,)”?
- vue.js - 从 main 调用组件的方法
- java - 使用 Mockito 测试 REST 删除方法
- sql - 在 SQL 中查找多个列的不匹配值
- search - 如何使用 sumologic 自定义 cron 搜索来安排每 10 分钟一次的搜索
- java - sendKeys 不适用于输入(三星上的数字键盘)与 Appium 和 Java 一起使用
- java - 从 Adapter 类填充 Activity 的 TextView 的问题
- sql - 根据单元格中的值创建记录