JS新手求助:将指定结构数组转换为自定义对象
解决方法
你用map得到数组是因为map本身的返回值就是数组,而你需要的是键为字段名的对象,推荐用Object.entries配合reduce来实现需求:
const payload = {left: ['name', 'phone'], right: ['address']}; const columns = Object.entries(payload).reduce((acc, [pinnedSide, cols]) => { cols.forEach(col => { acc[col] = { pinned: pinnedSide }; }); return acc; }, {}); const result = { columns }; console.log(result);
代码说明:
Object.entries(payload)将原对象转换为键值对数组:[['left', ['name','phone']], ['right', ['address']]]reduce初始化一个空对象作为累加器acc,遍历每个键值对- 对每个方向对应的字段数组,逐个给累加器添加属性:键为字段名,值为包含
pinned方向的对象 - 最后将生成的
columns对象包装成你需要的结构
如果你习惯分开处理左右方向,也可以用reduce分别生成左右对象再合并:
const payload = {left: ['name', 'phone'], right: ['address']}; const leftColumns = payload.left.reduce((acc, col) => ({...acc, [col]: {pinned: 'left'}}), {}); const rightColumns = payload.right.reduce((acc, col) => ({...acc, [col]: {pinned: 'right'}}), {}); const columns = {...leftColumns, ...rightColumns}; const result = { columns };
这个方式是先把左右数组各自转成目标格式的对象,再用扩展运算符...合并成最终的columns对象,效果和第一种方法一致。
内容的提问来源于stack exchange,提问作者catzndogz
相关产品推荐
相关产品推荐

