Javascript 获取对象数组,在对象中查找嵌套数组,计算TotalAmount并添加回原始对象
到目前为止,这是我对对象所做的最复杂的任务之一,我一直在研究如何做到这一点,或者这是否可能 假设我有一个像这样的对象数组-Javascript 获取对象数组,在对象中查找嵌套数组,计算TotalAmount并添加回原始对象,javascript,Javascript,到目前为止,这是我对对象所做的最复杂的任务之一,我一直在研究如何做到这一点,或者这是否可能 假设我有一个像这样的对象数组- [ { "id": "5555", "title": "Invoice", "amount": 2,
[
{
"id": "5555",
"title": "Invoice",
"amount": 2,
"address": "12",
"items": [
{
"title": "foobar",
"amount": 2,
"quantity": 1,
"discount": 0,
"taxes": [
{
"rate": 10,
"name": "tax"
}
]
}
]
}
]
我要拿这个东西。乘以金额*数量,然后乘以税金。So(金额*数量)*税。然后,当我得到这个答案时,将其添加回原始对象,如下所示-
[
{
"id": "5555",
"title": "Invoice",
"amount": 2,
"address": "12",
"items": [
{
"title": "foobar",
"amount": "2.2",
"tax": ".2"
}
]
}
]
我相信实现这一点的方法是使用.map()函数,但是我正在努力解决如何获得A。如何计算并将其添加回原始金额以获得总金额。
一旦我有了这个添加完成的总金额如何添加新的项目数组回到原来的对象
到目前为止我有什么,我在哪里被卡住了-
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,然后再将这个完成的对象加回。看起来应该比较简单。迭代每个对象,并使用
.map
重新指定其项
数组属性。从每个子项中获取金额、标题和税费,通过展平taxes
数组中的所有税费来计算税额,然后返回一个包含税额的新对象,并将税额添加到原始金额中:
const输入=[
{
“id”:“5555”,
“标题”:“发票”,
“金额”:2,
“地址”:“12”,
“项目”:[
{
“标题”:“foobar”,
“金额”:2,
“数量”:1,
“折扣”:0,
“税收”:[
{
“费率”:10,
“名称”:“税”
}
]
}
]
}
];
用于(输入的常量对象){
obj.items=obj.items.map(({
数量
标题
税
}) => {
const totalTaxPercent=税收减少((a,b)=>a+b.税率,0);
施工税=(总税额百分比/100)*金额;
返回{
标题
金额:字符串(金额+税金),
税:字符串(税),
};
});
}
控制台日志(输入)代码>看起来应该相对简单。迭代每个对象,并使用.map
重新指定其项
数组属性。从每个子项中获取金额、标题和税费,通过展平taxes
数组中的所有税费来计算税额,然后返回一个包含税额的新对象,并将税额添加到原始金额中:
const输入=[
{
“id”:“5555”,
“标题”:“发票”,
“金额”:2,
“地址”:“12”,
“项目”:[
{
“标题”:“foobar”,
“金额”:2,
“数量”:1,
“折扣”:0,
“税收”:[
{
“费率”:10,
“名称”:“税”
}
]
}
]
}
];
用于(输入的常量对象){
obj.items=obj.items.map(({
数量
标题
税
}) => {
const totalTaxPercent=税收减少((a,b)=>a+b.税率,0);
施工税=(总税额百分比/100)*金额;
返回{
标题
金额:字符串(金额+税金),
税:字符串(税),
};
});
}
控制台日志(输入)代码>将其分解为两个较小的问题。首先,您很好地描述了一个项目的成本,尽管我从数据中假设您想要合计税费。其余的只是对发票中的项目进行缩减的应用
const输入=[{
“id”:“5555”,
“标题”:“发票”,
“金额”:2,
“地址”:“12”,
“项目”:[{
“标题”:“foobar”,
“金额”:2,
“数量”:1,
“折扣”:0,
“税收”:[{
“费率”:10,
“名称”:“税”
}]
}]
}]
功能成本项目(项目){
const totalTax=项目税费减少((会计科目,el)=>会计科目+税率,0)
退货(项目数量*(项目金额-项目折扣))*(1+总税/100)
}
语音功能(发票){
退货发票.项目.减少((acc,项目)=>acc+成本项目(项目),0);
}
const costs=input.map(invoice=>({title:invoice.title,cost:costof语音(invoice)}))
log(成本)
将其分解为两个较小的问题。首先,您很好地描述了一个项目的成本,尽管我从数据中假设您想要合计税费。其余的只是对发票中的项目进行缩减的应用
const输入=[{
“id”:“5555”,
“标题”:“发票”,
“金额”:2,
“地址”:“12”,
“项目”:[{
“标题”:“foobar”,
“金额”:2,
“数量”:1,
“折扣”:0,
“税收”:[{
“费率”:10,
“名称”:“税”
}]
}]
}]
功能成本项目(项目){
const totalTax=项目税费减少((会计科目,el)=>会计科目+税率,0)
退货(项目数量*(项目金额-项目折扣))*(1+总税/100)
}
语音功能(发票){
退货发票.项目.减少((acc,项目)=>acc+成本项目(项目),0);
}
const costs=input.map(invoice=>({title:invoice.title,cost:costof语音(invoice)}))
log(costs)
稍微修改一下,我就得到了我需要的东西。只是需要另一个常量进行小计,即金额*数量。我开始明白。地图是怎么回事了(