【问题标题】:array containing objects to single object containing said objects [closed]包含对象的数组到包含所述对象的单个对象[关闭]
【发布时间】:2020-09-12 10:27:29
【问题描述】:

我目前正在以这种格式从 firebase firestore 集合中获取所有数据:

[
 {
  id: GEU8E3UJSSB33749K,
  advancedPayments: 20,
  ...
 },
 {
  id: FETB73UJSSBREF59V,
  advancedPayments: 20,
  },
  ...
]

为了能够更好地使用 Redux 访问这些数据,我需要将其转换为这种格式:

{
 GEU8E3UJSSB33749K: {
  advancedPayments: 20,
  ...
 },
 FETB73UJSSBREF59V: {
  advancedPayments: 20,
 },
 ...
}

我该怎么做?

【问题讨论】:

  • 您想要的格式不是有效的 javascript 语法。对象字面量包含键值对。
  • @Yousaf 谢谢...我之前犯了一个错误,我已经对正确的对象进行了更改
  • @sascha 也谢谢你......我之前犯了一个错误,我已经对正确的对象进行了更改

标签: javascript arrays reactjs object redux


【解决方案1】:

使用Array#reduce 来积累您的数据。迭代您的对象在累积的对象中创建 id 的属性并将整个对象添加到它。在此之后删除它的 id。

注意:我添加整个对象并删除 id-property,而不是遍历所有属性并检查键是否不等于 id 和仅将这些添加到新对象,因为这应该更快(尤其是如果您有很多 miore 属性)。

let arr = [
 {
  id: 'GEU8E3UJSSB33749K',
  advancedPayments: 20,
 },
 {
  id: 'FETB73UJSSBREF59V',
  advancedPayments: 20,
  }
];

let res = arr.reduce((acc, cur) => {
    acc[cur.id] = cur;
    delete acc[cur.id].id;
    return acc;
}, {});

console.log(res);

【讨论】:

    【解决方案2】:

    试试这个

       let res = [
         {
          id: 'GEU8E3UJSSB33749K',
          advancedPayments: 20,
         },
         {
          id: 'FETB73UJSSBREF59V',
          advancedPayments: 20,
          }
        ].reduce((accumulator, obj) => {
            const {advancedPayments} = obj;
            return {
              ...accumulator,
              [obj.id]: { advancedPayments }
            };
        }, {});
    
        console.log(res);

    【讨论】:

    • 这仅是因为您的对象只有idadvancedPayments 但OP 有更多属性...
    猜你喜欢
    • 1970-01-01
    • 2020-11-15
    • 2021-03-09
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多