如何将包含多厂商硬盘信息的JavaScript对象转换为型号-描述键值对结构?
解决JavaScript对象转换问题的思路与实现方法
嘿,这个转换需求其实很好实现,核心就是把原对象里的「品牌-型号」和「品牌描述」对应起来,最终生成以型号为键、描述为值的新对象。我给你两种具体的实现方式:
方法一:使用for...of循环遍历(直观易懂)
这种方式逻辑清晰,适合刚接触这类操作的开发者理解:
var words = [{ IBM: '00AJ136', DESCRIPTION_IBM: '500GB Serial ATA (SATA) 2.5"" 6G 7.2K NL SFF G3HS Hot-Swap Hard Drive', HP: '332751-B21', DESCRIPTION_HP: 'Compaq 72GB Non-Hot Plug Ultra320 SCSI Hard Drive 10K', DELL: '01XF66', DESCRIPTION_DELL: 'DELL 1.2TB HARD DRIVE', HITACHI: 'HUC101890CSS204', DESCRIPTION_HITACHI: '900GB 10K 12G SAS HARD DRIVE', EMC: '5048946', DESCRIPTION_EMC: '005048946 EMC 300GB 10K SFF SAS HARD DRIVE', SEAGATE: '2C6200-002', DESCRIPTION_SEAGATE: '2C6200-002 SEAGATE 300GB 10K SFF SAS HARD DRIVE', WD: 'WD1000CHTZ', DESCRIPTION_WD: 'WD 1TB 7200 6G 2.5"" SATA DRIVE', TOSHIBA: 'DT01ACA300', DESCRIPTION_TOSHIBA: 'TOSHIBA DT01ACA300 3TB 7200rpm 3.5"" Serial ATA 3.0 Hard Drive' }]; // 1. 取出数组中唯一的原始数据对象 const originalObj = words[0]; // 2. 初始化空对象存储转换结果 const convertedObj = {}; // 3. 遍历原始对象的所有键值对 for (const [key, value] of Object.entries(originalObj)) { // 只处理品牌键(跳过以DESCRIPTION_开头的描述键) if (!key.startsWith('DESCRIPTION_')) { // 拼接对应的描述键名 const descKey = `DESCRIPTION_${key}`; // 将型号作为新键,对应描述作为值存入结果对象 convertedObj[value] = originalObj[descKey]; } } console.log(convertedObj);
方法二:使用reduce函数(简洁高效)
如果喜欢更简洁的函数式写法,可以用reduce一步完成转换:
var words = [{ IBM: '00AJ136', DESCRIPTION_IBM: '500GB Serial ATA (SATA) 2.5"" 6G 7.2K NL SFF G3HS Hot-Swap Hard Drive', HP: '332751-B21', DESCRIPTION_HP: 'Compaq 72GB Non-Hot Plug Ultra320 SCSI Hard Drive 10K', DELL: '01XF66', DESCRIPTION_DELL: 'DELL 1.2TB HARD DRIVE', HITACHI: 'HUC101890CSS204', DESCRIPTION_HITACHI: '900GB 10K 12G SAS HARD DRIVE', EMC: '5048946', DESCRIPTION_EMC: '005048946 EMC 300GB 10K SFF SAS HARD DRIVE', SEAGATE: '2C6200-002', DESCRIPTION_SEAGATE: '2C6200-002 SEAGATE 300GB 10K SFF SAS HARD DRIVE', WD: 'WD1000CHTZ', DESCRIPTION_WD: 'WD 1TB 7200 6G 2.5"" SATA DRIVE', TOSHIBA: 'DT01ACA300', DESCRIPTION_TOSHIBA: 'TOSHIBA DT01ACA300 3TB 7200rpm 3.5"" Serial ATA 3.0 Hard Drive' }]; const convertedObj = Object.entries(words[0]).reduce((acc, [key, value]) => { if (!key.startsWith('DESCRIPTION_')) { acc[value] = words[0][`DESCRIPTION_${key}`]; } return acc; }, {}); console.log(convertedObj);
核心思路说明
两种方法的逻辑是一致的:
- 先从
words数组中取出唯一的原始对象(因为你的words是数组包裹的单个对象); - 遍历原始对象的所有键值对,筛选出品牌名称的键(而非描述键);
- 通过品牌键拼接出对应的描述键(比如
IBM对应DESCRIPTION_IBM); - 将品牌对应的型号作为新对象的键,对应描述作为值存入结果对象。
如果你的数据里存在重复的型号,后面的条目会覆盖前面的,这是JavaScript对象的特性,如果需要处理这种情况,可以额外加判断逻辑哦~
内容的提问来源于stack exchange,提问作者vipin joshi
相关产品推荐
相关产品推荐

