如何将含数组属性的JavaScript对象转换为目标对象数组?
嘿,这个转换需求很典型,我给你两种实用的实现方式,都是日常开发里常用的写法~
方法一:使用for循环(直观易懂)
这种写法逻辑清晰,适合刚接触JS的朋友理解:
// 你的原始输入对象 const originalData = { itemName: [ 'hard drive', 'fafa' ], itemValue: [ '383.00', '565' ], itemQuantity: [ '61626', '65' ], }; // 定义转换函数 function transformToItems(obj) { // 先拿到数组的长度(假设三个数组长度一致,若不一致可以加判断) const itemCount = obj.itemName.length; const itemsArray = []; // 遍历每个索引,把对应属性值拼成单个item对象 for (let i = 0; i < itemCount; i++) { itemsArray.push({ itemName: obj.itemName[i], itemValue: obj.itemValue[i], itemQuantity: obj.itemQuantity[i] }); } // 最后包装成你要的结构 return { items: itemsArray }; } // 调用函数得到结果 const finalResult = transformToItems(originalData); console.log(finalResult);
方法二:使用map方法(简洁优雅)
如果你喜欢函数式编程风格,用map可以一行搞定核心逻辑,代码更紧凑:
const originalData = { itemName: [ 'hard drive', 'fafa' ], itemValue: [ '383.00', '565' ], itemQuantity: [ '61626', '65' ], }; const finalResult = { items: originalData.itemName.map((name, index) => ({ itemName: name, itemValue: originalData.itemValue[index], itemQuantity: originalData.itemQuantity[index] })) }; console.log(finalResult);
额外提示:处理数组长度不一致的情况
如果你的原始数据里可能出现三个数组长度不一样的情况(比如某个属性少了元素),可以加个边界判断,取最短的数组长度来循环,避免出现undefined:
function transformToItems(obj) { // 先获取所有数组中最短的长度 const minItemCount = Math.min(...Object.values(obj).map(arr => arr.length)); const itemsArray = []; for (let i = 0; i < minItemCount; i++) { itemsArray.push({ itemName: obj.itemName[i], itemValue: obj.itemValue[i], itemQuantity: obj.itemQuantity[i] }); } return { items: itemsArray }; }
内容的提问来源于stack exchange,提问作者ApplePie
相关产品推荐
相关产品推荐

