javascript - 遍历数组和映射
问题描述
“我正在尝试每天获取仪器的总数量。我有一个对象数组,其中包含 instrumentId 和 dailyPrices 作为键。仪器 Id 只是一个键值对。每日价格键是一个对象,键为日期和值作为价格。我想通过计算时间量向对象添加一个键作为totalAmount(该日期的数量*价格)。”
“我曾尝试按仪器 ID 对数组进行分组并获取日期的价格,但它变得复杂了。我还尝试了 underscore.js 中的多种方法。”
let priceData = [{
instrumentId: 7138,
dailyPrices: {
2019 - 02 - 01: 15.89,
2019 - 02 - 02: 93.990,
2019 - 02 - 03: 80.90
}
},
{
instrumentId: 7132,
dailyPrices: {
2019 - 02 - 01: 10.89,
2019 - 02 - 02: 23.990,
2019 - 02 - 03: 87.90
}
}
]
let responseObject = {
2019 - 02 - 01: {
7132 - 65: {
instrumentId: 7132,
quantity: 10
},
7138 - 69: {
instrumentId: 7138,
quantity: 18
}
},
2019 - 02 - 03: {
7132 - 65: {
instrumentId: 7132,
quantity: 13
},
7138 - 69: {
instrumentId: 7138,
quantity: 15
}
}
}
我想要这样的输出
let responseObject = {
2019 - 02 - 01: {
7132 - 65: {
instrumentId: 7132,
quantity: 10,
totalAmount: 108.9
},
7138 - 69: {
instrumentId: 7138,
quantity: 18,
totalAmount: 286.02
}
},
2019 - 02 - 03: {
7132 - 65: {
instrumentId: 7132,
quantity: 13,
totalAmount: 1142.7
},
7138 - 69: {
instrumentId: 7138,
quantity: 15,
totalAmount: 1213.5
}
}
}
解决方案
您可以responseObject
通过查找价格来获取和生成想要的属性的条目。
最后重建新对象。
var priceData = [{ instrumentId: 7138, dailyPrices: { '2019-02-01': 15.89, '2019-02-02': 93.990, '2019-02-03': 80.90 } }, { instrumentId: 7132, dailyPrices: { '2019-02-01': 10.89, '2019-02-02': 23.990, '2019-02-03': 87.90 } }],
responseObject = { '2019-02-01': { '7132-65': { instrumentId: 7132, quantity: 10 }, '7138-69': { instrumentId: 7138, quantity: 18 } }, '2019-02-03': { '7132-65': { instrumentId: 7132, quantity: 13 }, '7138-69': { instrumentId: 7138, quantity: 15 } } },
result = Object.fromEntries(Object
.entries(responseObject)
.map(([k, o]) => [
k,
Object.fromEntries(Object
.entries(o)
.map(([l, q]) => [
l,
{ ...q, totalAmount: q.quantity * priceData.find(p => q.instrumentId === p.instrumentId).dailyPrices[k] }
]))
]));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- julia - 输出到 Julia 中函数的第一个输入
- gcc - 有没有办法列出在优化级别(比如 -O2)启用的所有 GCC 优化?
- xml - 用另一个替换 XML 标记并使用 VB.net 添加新标记
- git - 如何列出自 X 日期以来匹配模式的标签?
- javascript - 为什么组件没有以角度加载?
- javascript - jsPDF未按要求呈现
- java - intent.getextra() 正在接收 null 并且 intent.hasextra() 在第二个活动中不起作用
- wso2 - 数据未在 wso2 esb 编排中到达我的端点
- mysql - MySQL - 查找不同 ID 的行之间的时间差
- php - 如何配置 PHP 以使用 try catch 捕获致命错误?