【问题标题】:JavaScript convert Array of Array of Objects into Array of objectsJavaScript 将对象数组转换为对象数组
【发布时间】:2019-10-22 10:11:46
【问题描述】:

我需要使用 JavaScript 将对象数组转换为简单的对象数组

下面我把当前代码和当前输出放在一起

const result = [
  [
    {
      name: '1'
    },
    {
      name: '2'
    }
  ],
  [
    {
      name: '3'
    },
    {
      name: '4'
    }
  ],
  [
    {
      name: '5'
    }
  ],
  [
    {
      name: '6'
    }
  ]
]

const a = result.map(item => {
  return Object.assign({}, ...item)
})


console.log(a)

以上代码的输出(当前和错误的输出)

[ { "name": "2" }, { "name": "4" }, { "name": "5" }, { "name": "6" } ]

预期和需要的输出

[
  {
    name: '1'
  },
  {
    name: '2'
  },
  {
    name: '3'
  },
  {
    name: '4'
  },
  {
    name: '5'
  },
  {
    name: '6'
  }
]

【问题讨论】:

    标签: javascript arrays object ecmascript-6 foreach


    【解决方案1】:

    您似乎在寻找flat (mdn)

    const result = [
      [
        {
          name: '1'
        },
        {
          name: '2'
        }
      ],
      [
        {
          name: '3'
        },
        {
          name: '4'
        }
      ],
      [
        {
          name: '5'
        }
      ],
      [
        {
          name: '6'
        }
      ]
    ]
    
    const a = result.flat();
    
    
    console.log(a)

    【讨论】:

      【解决方案2】:

      有一种简单且支持良好的方法可以在不使用 flat 的情况下展平数组 - 使用 reducepush(为了提高效率而不是 concat)。

      const result = [
        [
          {
            name: '1'
          },
          {
            name: '2'
          }
        ],
        [
          {
            name: '3'
          },
          {
            name: '4'
          }
        ],
        [
          {
            name: '5'
          }
        ],
        [
          {
            name: '6'
          }
        ]
      ]
      
      const a = result.reduce((acc, curr) => (acc.push(...curr), acc));
      
      console.log(a);
      .as-console-wrapper { max-height: 100% !important; top: auto; }

      ES5 语法:

      var result = [
        [
          {
            name: '1'
          },
          {
            name: '2'
          }
        ],
        [
          {
            name: '3'
          },
          {
            name: '4'
          }
        ],
        [
          {
            name: '5'
          }
        ],
        [
          {
            name: '6'
          }
        ]
      ]
      
      var a = result.reduce(function(acc, curr) {
        return (Array.prototype.push.apply(acc, curr), acc);
      });
      
      console.log(a);

      【讨论】:

      • 这是低效的,因为concat 每次都会创建一个新数组。更有效的版本是将push 元素转换为acc
      • 好的@slider我会改变它。
      • 固定@slider,更好吗?
      【解决方案3】:

      您可以使用 Array.prototype.concat 来合并数组。

      Array.concat

      const result = [
        [
          {
            name: '1'
          },
          {
            name: '2'
          }
        ],
        [
          {
            name: '3'
          },
          {
            name: '4'
          }
        ],
        [
          {
            name: '5'
          }
        ],
        [
          {
            name: '6'
          }
        ]
      ]
      
      const b = Array.prototype.concat.apply([], result);
      console.log(b);

      【讨论】:

        猜你喜欢
        • 2017-01-14
        • 1970-01-01
        • 2021-01-07
        • 1970-01-01
        • 2021-05-07
        • 2021-01-15
        • 2021-06-19
        • 2017-11-13
        • 2014-02-04
        相关资源
        最近更新 更多