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

JS插入数组前检查项是否存在 处理含重复键的键值对格式化需求

重复Key拼接数据的结构化转换方案

原始数据示例

原始数据将多个键、值分别拼接在单个JSON键值对中,存在重复键:

// 包含重复key的未格式化原始数据
let query = {
  "junk,fruit,vegetable,junk,fruit": "pizza,apple,potato,burger,mango"
}

原有处理逻辑与问题

原有逻辑直接为对象赋值,会导致重复键被覆盖,仅保留最后一个对应值:

原有代码

const keys = Object.keys(query)[0].split(",");
const values = Object.values(query)[0].split(",");

const newObj = {}

for (let i = 0; i < keys.length; i++) {
   newObj[keys[i]] = values[i]
}

console.log(newObj)

原有输出结果

{
  junk: 'burger',
  fruit: 'mango',
  vegetable: 'potato'
}

预期输出结构

要求重复键对应的值存入同个data数组中,结构如下:

{
  'junk': {
    'data': [
      'pizza', 
      'burger'
    ]
  }, 
  'fruit': {
    'data': [
      'apple',
      'mango'
    ]
  },
  'vegetable': {
    'data': [
      'potato'
    ]
  }
}

修正后实现方案

你之前用includes判断是错误的,该方法为数组实例方法,不能用于判断对象是否包含指定键,可使用hasOwnProperty方法判断键是否存在,实现如下:

const keys = Object.keys(query)[0].split(",");
const values = Object.values(query)[0].split(",");

const newObj = {};

for (let i = 0; i < keys.length; i++) {
  const currentKey = keys[i];
  const currentValue = values[i];
  // 判断当前键是否已存在于结果对象中
  if (newObj.hasOwnProperty(currentKey)) {
    // 已存在则将当前值推入对应data数组
    newObj[currentKey].data.push(currentValue);
  } else {
    // 不存在则初始化对应结构
    newObj[currentKey] = {
      data: [currentValue]
    };
  }
}

console.log(newObj);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:36:04