如何将对象数组转换为以元素id为键的嵌套对象结构?
嘿,这个转换需求我之前做项目时也遇到过,用JS原生的几个方法就能轻松搞定,给你两种实用的方案:
方法1:用Array.reduce()(兼容性拉满)
这是最稳妥的方案,几乎所有现代浏览器都支持,甚至能兼容一些旧版本环境:
const originalArray = [{id:1}, {id:2}]; const transformedObject = originalArray.reduce((accumulator, currentItem) => { // 把当前元素的id作为键,元素本身作为值存入累加器对象 accumulator[currentItem.id] = currentItem; return accumulator; }, {}); // 初始值是空对象 console.log(transformedObject); // 输出:{"1": { id: 1 }, "2": { id: 2 }}
原理很简单:reduce会遍历数组,每次把当前元素的id作为键,把元素本身挂载到累加器对象上,最后返回的累加器就是我们想要的结构。
方法2:用Object.fromEntries()(ES2019+,更简洁)
如果你的项目环境支持ES2019及以上(比如现代浏览器、Node.js 12+),这个方法会更简洁直观:
const originalArray = [{id:1}, {id:2}]; const transformedObject = Object.fromEntries( originalArray.map(item => [item.id, item]) ); console.log(transformedObject); // 输出:{"1": { id: 1 }, "2": { id: 2 }}
这里先通过map把每个数组元素转换成[键, 值]的二维数组格式,再用Object.fromEntries直接把这个二维数组转成目标对象,一步到位,代码看起来更清爽。
小提示
因为JavaScript对象的键只能是字符串或Symbol类型,所以即使你的id是数字,转换后也会自动变成字符串形式的键,正好符合你需要的"1"、"2"这种格式,完全不用额外处理~
内容的提问来源于stack exchange,提问作者Asaf Aviv
相关产品推荐
相关产品推荐

