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
相关产品推荐
相关产品推荐

