如何将含'LB'状态的对象拆分为两个独立对象并返回
解决方案
原代码的核心问题是使用map函数处理数据,而map每次只能返回单个元素,无法实现将一个对象拆分为两个对象的需求。改用flatMap即可解决这个问题,因为flatMap允许返回一个数组,最终结果会被自动扁平化。
以下是修改后的代码:
function addData() { const data = [{ period: '2024-12-31T00:00:00.000Z', USD: 1000, }, { period: '2024-12-31T00:00:00.000Z', USD: 800, }, { period: '2024-12-31T00:00:00.000Z', USD: 1200, }, // 可添加更多数据对象 ]; const fractionL = 0.2; const fractionB = 0.7; const r0Data = data.flatMap((r0row) => { const object = { ...r0row, flex: createFlex(r0row) }; if (object.flex.includes('LB')) { const usdForL = fractionL * object.USD; const usdForB = fractionB * object.USD; // 创建L对应的对象,flex数组所有元素替换为L const objectForL = { ...object, flex: object.flex.map(() => 'L'), USD: usdForL }; // 创建B对应的对象,flex数组所有元素替换为B const objectForB = { ...object, flex: object.flex.map(() => 'B'), USD: usdForB }; // 返回两个对象组成的数组,flatMap会自动扁平化 return [objectForL, objectForB]; } // 不含LB状态的对象直接返回 return [object]; }); return r0Data; // 原代码遗漏了返回语句 } function createFlex(row) { // 示例逻辑,返回包含LB的状态数组 return ['LB', 'L', 'B']; } console.log(addData());
关键修改说明:
- 替换
map为flatMap:允许返回多个元素,满足拆分需求 - 修改flex数组处理:将所有状态统一替换为目标的
L或B,符合预期结果 - 补充函数返回语句:原代码中
addData函数没有返回r0Data,导致输出undefined - 拆分后直接返回两个对象的数组:
flatMap会将数组中的元素展开到最终结果数组中
执行后,每个包含LB的原对象都会被拆分为两个对象,分别对应L和B状态,且最终结果中不存在LB状态。
内容的提问来源于stack exchange,提问作者The Dead Man
相关产品推荐
相关产品推荐

