如何使用解构赋值从二维数组生成指定结构的对象
二维数组转成对键值对象的最简实现
这里提供几种简洁的实现方式,按需选择:
方法一:扁平化数组 + reduce(通用型)
不管子数组里有多少组键值对,这种方法都能适配:
const arr = [[1, 2, 3, 4], [5, 6, 7, 8]]; const obj = arr.flat().reduce((acc, curr, index, flatArr) => { // 偶数索引的元素作为键,下一个元素作为值 if (index % 2 === 0) acc[curr] = flatArr[index + 1]; return acc; }, {});
方法二:解构赋值(结构固定时更直观)
如果你的子数组结构固定(每个子数组都是4个元素,分成两组键值),用解构赋值会很清晰:
const arr = [[1, 2, 3, 4], [5, 6, 7, 8]]; const obj = {}; // 直接解构每个子数组的四个元素 for (const [k1, v1, k2, v2] of arr) { obj[k1] = v1; obj[k2] = v2; }
方法三:扁平化 + Object.fromEntries(一行极简写法)
利用Object.fromEntries接受键值对数组的特性,结合分组处理:
const arr = [[1, 2, 3, 4], [5, 6, 7, 8]]; const obj = Object.fromEntries( arr.flat().reduce((pairs, val, i) => { i % 2 ? pairs[pairs.length - 1].push(val) : pairs.push([val]); return pairs; }, []) );
或者更易读的分组写法:
const flatArr = arr.flat(); const obj = Object.fromEntries( Array.from({ length: flatArr.length / 2 }, (_, i) => [flatArr[2*i], flatArr[2*i+1]]) );
内容的提问来源于stack exchange,提问作者flopinski
相关产品推荐
相关产品推荐

