代码之家  ›  专栏  ›  技术社区  ›  alex

如何将基于ID的对象转换为对象数组?

  •  1
  • alex  · 技术社区  · 7 年前

    我有如下数据:

    {
      "-L8BpxbS70KYrZMQUF0W": {
        "createdAt": "2018-03-22T16:33:57+08:00",
        "email": "ss@ss.ss",
        "name": "ss"
      },
      "-KYrZMQUF0WL8BpxbS70": {
         // etc.
       }
    }
    

    我想把它变成这样:

    [{
      id: '-L8BpxbS70KYrZMQUF0W
      createdAt: "2018-03-22T16:33:57+08:00",
      email: "ss@ss.ss",
      name: "ss"
    }, {
      id: -KYrZMQUF0WL8BpxbS70"
      // etc.
    }]
    

    我从以下内容开始:

      Object.keys(idBasedObjects).forEach(key => {
        console.log(resp[key])
      })
    

    但我知道 undefined

    创建此阵列的最佳方法是什么?

    2 回复  |  直到 7 年前
        1
  •  8
  •   Ori Drori    7 年前

    使用获取键和值 Object.entries() Array.map() 他们使用 object spread :

    const obj = {"-L8BpxbS70KYrZMQUF0W":{"createdAt":"2018-03-22T16:33:57+08:00","email":"ss@ss.ss","name":"ss"},"-KYrZMQUF0WL8BpxbS70":{}};
    
    const result = Object.entries(obj).map(([id, props]) => ({
      id,
      ...props
    }));
    
    console.log(result);
        2
  •  2
  •   gurvinder372    7 年前

    使用 Object.keys ,则, Object.assign map

    var output = Object.keys(obj).map( s => Object.assign( obj[s], {id : s} ))
    

    演示

    var obj = {
      "-L8BpxbS70KYrZMQUF0W": {
        "createdAt": "2018-03-22T16:33:57+08:00",
        "email": "ss@ss.ss",
        "name": "ss"
      },
      "-KYrZMQUF0WL8BpxbS70": {
        "createdAt": "2018-03-22T16:33:57+08:00",
        "email": "s2s@ss.ss",
        "name": "ss2"
      }
    };
    
    var output = Object.keys(obj).map(s => Object.assign(obj[s], {
      id: s
    }));
    
    console.log(output);