将带数字键的JavaScript对象转换为含trade_id的对象数组
解决方案
可以通过遍历原对象的键值对,逐个转换字段格式来实现需求,具体步骤和代码如下:
转换逻辑说明
- trade_id:将原对象的数字键转为数字类型字段
- trade_date:把ISO格式日期(如
2022-12-09T00:00:00)转换为MM/D/YYYY格式 - settlement_date:原字段为
null时替换为'1/1/0001' - quantity/price:将数字类型转为字符串类型
- portfolio_name:去除首尾空格,同时清理末尾的标点符号
代码实现
// 原数据 const originalTrades = { 1: { trade_date: "2022-12-09T00:00:00", settlement_date: null, trade_type: "Buy", quantity: 25, security_id: "AAPL", price: 125, portfolio_name: " Goldman Sachs.", counter_party: null, trader: "trader1" }, 2: { trade_date: "2022-12-09T00:00:00", settlement_date: null, trade_type: "Buy", quantity: 25, security_id: "AMZN", price: 105, portfolio_name: "JPM", counter_party: null, trader: "trader2" } }; // 转换函数 const transformTrades = (trades) => { return Object.entries(trades).map(([tradeId, trade]) => { // 处理trade_date格式 const date = new Date(trade.trade_date); const formattedTradeDate = `${date.getMonth() + 1}/${date.getDate()}/${date.getFullYear()}`; // 处理portfolio_name const cleanedPortfolioName = trade.portfolio_name.trim().replace(/[.,!?]$/, ''); return { trade_id: Number(tradeId), trade_date: formattedTradeDate, settlement_date: trade.settlement_date ?? '1/1/0001', trade_type: trade.trade_type, quantity: String(trade.quantity), security_id: trade.security_id, price: String(trade.price), portfolio_name: cleanedPortfolioName, counter_party: trade.counter_party, trader: trade.trader }; }); }; // 执行转换 const transformedTrades = transformTrades(originalTrades); console.log(transformedTrades);
输出结果
[ { trade_id: 1, trade_date: '12/9/2022', settlement_date: '1/1/0001', trade_type: 'Buy', quantity: '25', security_id: 'AAPL', price: '125', portfolio_name: 'Goldman Sachs', counter_party: null, trader: 'trader1' }, { trade_id: 2, trade_date: '12/9/2022', settlement_date: '1/1/0001', trade_type: 'Buy', quantity: '25', security_id: 'AMZN', price: '105', portfolio_name: 'JPM', counter_party: null, trader: 'trader2' } ]
内容的提问来源于stack exchange,提问作者Chatra
相关产品推荐
相关产品推荐

