【问题标题】:How to merge/combining multiple Object into Array如何将多个对象合并/组合成数组
【发布时间】:2019-12-18 11:08:08
【问题描述】:

我正在寻找将对象合并到数组中的最佳方法.. 这是我的问题:

Object {
  "payload": Array [
    Object {
      "category": "kontrakan",
    },
    Object {
      "Tenant": "anji",
    },
  ],
  "type": "GET_DATA_VENUE_SUCCESS",
}

Object {
  "payload": Array [
    Object {
      "category": "kost",
    },
    Object {
      "Tenant": "ade",
    },
  ],
  "type": "GET_DATA_VENUE_SUCCESS",
} 

期待这样的变换:

{
  [
   {"category" : "kontrakan","Tenant" : "anji"}, 
   {"category" : "kost", "Tenant" : "ade"}
  ]
}

这里的代码:

let obj = doc.data();
let arrObj = _.map(_.keys(obj), key => ({ [key]: obj[key] }));
console.log(arrObj);

我已经尝试过其他解决方案。 object.assign/key, lodash : _.merge, union 仍然无法正常工作...

【问题讨论】:

  • 我完全迷路了,你能解释一下 A、B、Fizz 和 Fuzz 是从哪里来的吗?
  • 您好,可以提供输入数据示例吗?
  • 值 A、B 和 FIzz Fuzz 只是示例值,我将对其进行编辑
  • 另外,所需的输出无效。
  • 原始对象是从什么语法派生而来的?

标签: javascript arrays dictionary object arrayobject


【解决方案1】:

您可以将map 方法与reduceObject.assign 结合使用以合并objects 属性

var arr = [{ "payload": [ { "category": "kontrakan", }, { "Tenant": "anji", } ], "type": "GET_DATA_VENUE_SUCCESS", }, { "payload": [ { "category": "kost", }, { "Tenant": "ade", }, ], "type": "GET_DATA_VENUE_SUCCESS", }]

var result = arr.map(({payload}) => payload.reduce((obj, item) => Object.assign(obj, item), {}));
console.log(result);

【讨论】:

    【解决方案2】:

    您要查找的函数是reduce

    您可以使用 reduce 将“有效负载”数据组合到单个对象中。通过使用一个对象作为累加器。

    例子:

    const a = {
      payload: [{
        category: 'a'
      },
      {
        tenant: 'a'
      }]
    };
    
    
    function mergePayload(obj) {
      return obj.payload.reduce((newObj, payloadObj) => {
        // Create a new object with the properties of the old and the new combined
        return Object.assign(newObj, payloadObj);
      }, {});
    }
    
    // {category: "a", tenant: "a"}
    console.log(mergePayload(a))
    

    您可以将包含数据的数组映射到 reducer:

    const data = [a, a];
    
    // [{category: "a", tenant: "a"}, {category: "a", tenant: "a"}]
    console.log(data.map((d) => mergePayload(d)));
    

    编辑: 您可以缩短 reduce 时间,但这将不再为注释腾出空间。

    function mergePayload(obj) {
      return obj.payload.reduce((newObj, payloadObj) => Object.assign(newObj, payloadObj), {})
    }
    

    【讨论】:

      【解决方案3】:

      假设数组中只有两个对象,可能的属性是“类别”和“租户”

      let arr = [{  "payload": [{      "category": "kontrakan",    },    {      "Tenant": "anji",    },  ],  "type": "GET_DATA_VENUE_SUCCESS"}, {  "payload": [{      "category": "kost",    },    {      "Tenant": "ade",    },  ],  "type": "GET_DATA_VENUE_SUCCESS"}],
          result = arr.map(({payload: [{category: category}, {Tenant: tenant}]}) => ({category, tenant}));
      
      console.log(result);
      .as-console-wrapper { max-height: 100% !important; top: 0; }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-04
        • 2022-11-08
        • 2020-06-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多