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

JavaScript中为对象数组重复产品名分配相同productId

统一重复产品名称的productId

我们有一个包含productId、productName、price字段的JavaScript对象数组,其中productName存在重复,但所有productId初始都是唯一的。需要实现的是:让所有同名产品共享同一个productId(以第一次出现的产品的productId为准)。

示例输入

const products = [
  { productId: 1, productName: 'Apple', price: 1.0 },
  { productId: 2, productName: 'Banana', price: 0.5 },
  { productId: 3, productName: 'Orange', price: 1.2 },
  { productId: 4, productName: 'Apple', price: 1.0 },
  { productId: 5, productName: 'Banana', price: 0.5 },
];

示例输出

const products = [
  { productId: 1, productName: 'Apple', price: 1.0 },
  { productId: 2, productName: 'Banana', price: 0.5 },
  { productId: 3, productName: 'Orange', price: 1.2 },
  { productId: 1, productName: 'Apple', price: 1.0 },
  { productId: 2, productName: 'Banana', price: 0.5 },
];

解决方案

核心思路是先建立产品名称到对应首次出现productId的映射表,再遍历数组替换重复产品的ID:

const products = [
  { productId: 1, productName: 'Apple', price: 1.0 },
  { productId: 2, productName: 'Banana', price: 0.5 },
  { productId: 3, productName: 'Orange', price: 1.2 },
  { productId: 4, productName: 'Apple', price: 1.0 },
  { productId: 5, productName: 'Banana', price: 0.5 },
];

// 构建名称到首次出现ID的映射
const nameIdMap = {};
products.forEach(item => {
  if (!nameIdMap[item.productName]) {
    nameIdMap[item.productName] = item.productId;
  }
});

// 更新数组中的productId
const updatedProducts = products.map(item => ({
  ...item,
  productId: nameIdMap[item.productName]
}));

console.log(updatedProducts);

代码说明

  • 第一步遍历数组时,仅记录每个productName第一次出现时对应的productId,确保映射表中每个名称只对应一个唯一ID。
  • 第二步使用map方法创建新数组,复制原对象的所有属性并替换productId为映射表中的对应值,避免修改原数组(如果需要直接修改原数组,可改用forEach遍历赋值)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 20:20:08