首页 > 解决方案 > 反应将数组转换为对象的对象

问题描述

在我的反应项目中,我得到了以下结构(带有键的对象):

const listItems = {
  1:{
    id: 1,
    depth: 0,
    children: [2,5]
  },
  2:{
    id: 2,
    depth: 1,
    children: [3,4],
    parentIndex: 1, 
    disabled: false 
  },
  3:{
    id: 3,
    depth: 2,
    parentIndex: 2,
    disabled: false
  },
}

这样做之后:

let listItemsModified = Object.keys(listItems).map((i, listItem, inputArray) => {

 listItems[i]._styles = {
    root: {overflow: 'hidden'}
 };
  return listItems[i];
});

我得到的只是对象数组:

[ 
  {
    id: 1,
    depth: 0,
    children: [2,5],
    _styles: 'some styles here'
  },{
    id: 2,
    depth: 1,
    children: [3,4],
    parentIndex: 1, 
    _styles: 'some styles here',
    disabled: false 
  },
  {
    id: 3,
    depth: 2,
    parentIndex: 2,
    _styles: 'some styles here',
    disabled: false
  }
]

但我需要一个对象,就像我最初一样,像这样:

{
  1:{
    id: 1,
    depth: 0,
    _styles: 'some styles here',
    children: [2,5]
  },
  2:{
    id: 2,
    depth: 1,
    children: [3,4],
    parentIndex: 1, 
    _styles: 'some styles here',
    disabled: false 
  },
  3:{
    id: 3,
    depth: 2,
    parentIndex: 2,
    _styles: 'some styles here',
    disabled: false
  },
}

我试过这样的事情:

Object.keys(listitemsModified).reduce((array, key) => {
    return {key: listitemsModified[key]}
}, {})

但我只得到 1 个对象而不是对象的对象。欢迎任何如何解决此问题的想法。谢谢

标签: javascriptreactjs

解决方案


像这样的东西应该适用于原件listItems

    const listItems = {
      1:{
        id: 1,
        depth: 0,
        children: [2,5]
      },
      2:{
        id: 2,
        depth: 1,
        children: [3,4],
        parentIndex: 1, 
        disabled: false 
      },
      3:{
        id: 3,
        depth: 2,
        parentIndex: 2,
        disabled: false
      },
    }

    const result = Object.keys(listItems).reduce((acc, key) => {
        acc[key] = {
            ...listItems[key],
            _styles: {
                root: {overflow: 'hidden'}
            }
        };
        return acc;
    }, {});
    
    console.log(result);


推荐阅读