如何克隆JavaScript对象数组并重新调整对象键顺序?
调整对象数组中对象的键顺序
要实现按指定顺序重新排列数组中每个对象的键,核心思路是先定义目标键的顺序,再遍历原数组,按该顺序重新构建每个对象。以下是两种可靠的实现方式:
方法一:使用 map + reduce
const desiredOrder = ['Total', 'Number', 'Summer', 'Spring', 'Autumn', 'Winter', 'Difference']; const updated = data.map(item => { return desiredOrder.reduce((newObj, key) => { newObj[key] = item[key]; return newObj; }, {}); });
方法二:使用 map + Object.fromEntries(ES2019及以上)
const desiredOrder = ['Total', 'Number', 'Summer', 'Spring', 'Autumn', 'Winter', 'Difference']; const updated = data.map(item => Object.fromEntries(desiredOrder.map(key => [key, item[key]])) );
你之前尝试的问题分析
- 第一种写法的问题:循环中
push的是单个属性值,而非构建新对象,最终得到的是包含所有属性值的一维数组,而非目标的对象数组。 - 第二种写法的问题:
Object.assign(objectOrder, data[i])会复用同一个objectOrder对象,每次循环都修改它并推入数组,导致数组中所有元素指向同一个对象引用。此外,这种合并方式无法保证严格按你期望的顺序排列键。
内容的提问来源于stack exchange,提问作者kkJhn
相关产品推荐
相关产品推荐

