You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为已筛选的购买客户数组添加对应购买产品名称列表?

实现思路与解决方案

推理思路

  • 先把产品列表转换成ID与名称的映射对象,避免每次匹配产品ID都遍历整个产品数组,提升查询效率
  • 遍历已筛选出的customersWhoPurchased数组,为每个客户对象新增productNames字段
  • 对每个客户,找到其对应的购买记录集合,提取所有productId并做去重处理
  • 通过映射对象把去重后的产品ID转换成对应的产品名称,最终赋值给productNames字段

代码实现

步骤1:构建产品ID映射

// 将产品数组转为ID->名称的映射表,优化查询性能
const productMap = data.products.reduce((acc, product) => {
  acc[product.id] = product.name;
  return acc;
}, {});

步骤2:处理客户数组,添加产品名称字段

const customersWithProducts = customersWhoPurchased.map(customer => {
  // 找到当前客户对应的购买记录
  const customerPurchaseRecord = data.purchases.find(p => p.customerId === customer.id);
  
  // 提取所有购买的产品ID并去重
  const uniqueProductIds = customerPurchaseRecord 
    ? [...new Set(customerPurchaseRecord.purchases.map(item => item.productId))]
    : [];
  
  // 转换为产品名称数组
  const productNames = uniqueProductIds.map(id => productMap[id]);
  
  // 返回包含productNames的新客户对象(不修改原对象)
  return { ...customer, productNames };
});

代码说明

  • 产品映射:使用reduce遍历产品数组,构建以产品ID为键、名称为值的对象,后续通过ID获取名称的操作是O(1)时间复杂度
  • 去重逻辑:利用Set的唯一性特性,快速去除重复的产品ID,再通过扩展运算符转回数组
  • 不可变处理:使用对象展开运算符...复制原客户对象,避免直接修改原数组中的对象,保证数据纯净性

内容的提问来源于stack exchange,提问作者user19031425

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 22:23:11