JavaScript数组映射中拆分SKU并复制对象的需求咨询
解决方案
要处理CSV行中逗号分隔的多个SKU,生成对应数量的对象(首个保留原salesTax,其余设为0),可以通过拆分SKU数组 + 扁平化映射实现,核心代码如下:
完整示例代码
// 模拟CSV解析后的行数据 const csvRows = [ { SKU: "SKU-01", name: "Product A", salesTax: 0.08, price: 100 }, { SKU: "SKU-1, SKU-2", name: "Product B", salesTax: 0.06, price: 200 }, { SKU: "SKU3, SKU4, SKU5", name: "Product C", salesTax: 0.1, price: 150 } ]; const processedData = csvRows.flatMap(row => { // 拆分SKU并去除每个项的前后空格 const skus = row.SKU.split(',').map(sku => sku.trim()); // 为每个SKU生成对应对象 return skus.map((sku, index) => ({ sku: sku, productName: row.name, salesTax: index === 0 ? row.salesTax : 0, price: row.price // 可添加其他需要映射的字段 })); }); // 输出结果 console.log(processedData);
关键逻辑说明
- 用
flatMap替代map:flatMap会将每行生成的多个对象数组自动扁平化,最终得到一维的对象数组,避免嵌套结构。 - SKU拆分与清洗:通过
split(',')分割字符串,再用trim()处理每个SKU的前后空格,兼容带空格的分隔格式(如"SKU-1, SKU-2")。 salesTax赋值规则:遍历SKU数组时,通过index === 0判断是否为首个SKU,是则保留原salesTax值,其余直接设为0。
可选优化(处理空SKU)
如果CSV行中可能存在空SKU(如", SKU-2"),可以添加过滤逻辑去除无效项:
const skus = row.SKU.split(',') .map(sku => sku.trim()) .filter(sku => sku); // 过滤空字符串
内容的提问来源于stack exchange,提问作者awariat
相关产品推荐
相关产品推荐

