【问题标题】:Merge objects in a loop在循环中合并对象
【发布时间】:2021-07-22 01:25:44
【问题描述】:

我有这个对象数组:

[
  [
    {a: 'FER', b: 'MEN', c: 'TUM'},
    {a: 'RIS ', b: 'US', c: 'SOU'}, 
    {a: 'CON', b: 'SEC', c: 'TETUR'}
  ],
  [
    {d: 'LIGU'}, 
    {d: 'GU'}, 
    {d: 'LA'}
  ],
  [
    {e: 'UL', f: 'LAM'},
    {e: 'COR', f: 'PER'},
    {e: 'EGE', f: 'STAS'}
  ]
]

我想以更通用的方式获得的是(实际上,我有一个由 21 个数组组成的数组,每个数组有 205 个对象):

[
  {a: 'FER', b: 'MEN', c: 'TUM', d: 'LIGU', e: 'UL', f: 'LAM'},
  {a: 'RIS ', b: 'US', c: 'SOU', d: 'GU', e: 'COR', f: 'PER'},
  {a: 'CON', b: 'SEC', c: 'TETUR', d: 'LA', e: 'EGE', f: 'STAS'}
]

我尝试了很多东西(对象分配、减少等),但现在我的脑袋一团糟,我一直在思考如何在循环中合并对象。 非常感谢任何帮助!

【问题讨论】:

    标签: javascript arrays loops object merge


    【解决方案1】:

    您可以通过对象映射来减少。

    const
        data = [[{ a: 'FER', b: 'MEN', c: 'TUM' }, { a: 'RIS ', b: 'US', c: 'SOU' }, { a: 'CON', b: 'SEC', c: 'TETUR' }], [{ d: 'LIGU' }, { d: 'GU' }, { d: 'LA' }], [{ e: 'UL', f: 'LAM' }, { e: 'COR', f: 'PER' }, { e: 'EGE', f: 'STAS' }]],
        result = data.reduce((a, b) => a.map((o, i) => ({ ...o, ...b[i] })));
    
    console.log(result);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    【讨论】:

      【解决方案2】:

      使用Array#reduceArray#forEach

      const data = [
        [
          { a: 'FER', b: 'MEN', c: 'TUM' },
          { a: 'RIS ', b: 'US', c: 'SOU' }, 
          { a: 'CON', b: 'SEC', c: 'TETUR' }
        ],
        [
          { d: 'LIGU' }, 
          { d: 'GU' }, 
          { d: 'LA' }
        ],
        [
          { e: 'UL', f: 'LAM' },
          { e: 'COR', f: 'PER' },
          { e: 'EGE', f: 'STAS' }
        ]
      ];
      
      const res = data.reduce((acc, arr) => {
        arr.forEach((obj, i) => {
          acc[i] = { ...(acc[i] || {}), ...obj };
        });
        return acc;
      }, []);
      
      console.log(res);

      【讨论】:

        【解决方案3】:
        var counter = 0,
            finalarr = [],
            tmpobj = {};
        while (counter < arr[0].length) {
            tmpobj = {}
            arr.forEach((subarr, index) => {
                tmpobj = {
                    ...tmpobj,
                    ...subarr[counter]
                }
            })
            finalarr.push(tmpobj)
        
            counter++;
        }
        console.log('Final array:', finalarr)
        

        【讨论】:

          猜你喜欢
          • 2021-10-13
          • 1970-01-01
          • 2021-12-14
          • 1970-01-01
          • 2023-03-31
          • 2020-11-17
          • 1970-01-01
          • 2016-03-17
          • 2016-06-18
          相关资源
          最近更新 更多