【问题标题】:How to map this specific array of objects to the array grouped by the common key value如何将这个特定的对象数组映射到按公共键值分组的数组
【发布时间】:2021-11-19 14:06:04
【问题描述】:

我有这个简化的对象数组

var items = [{"function":"function_1","process":"process_1"}, {"function":"function_1","process":"process_2"}, {"function":"function_1","process":"process_3"},  {"function":"function_2","process":"process_3"},  {"function":"function_2","process":"process_4"}]

我想在JS中根据key映射到如下数组中:

result = [
{
    "function":"function_1",
    "process": [
      "process_1",
      "process_2" 
  ]
}, 
{
    "function":"function_2",
    "process": [
      "process_3",
      "process_4" 
  ]
}
]

【问题讨论】:

    标签: javascript ecmascript-6


    【解决方案1】:

    献给你我的朋友

    var items = [{"function":"function_1","process":"process_1"}, {"function":"function_1","process":"process_2"}, {"function":"function_1","process":"process_3"},  {"function":"function_2","process":"process_3"},  {"function":"function_2","process":"process_4"}]
    
    
    var arr2 = items.reduce( (a,b) => {
      
        var i = a.findIndex( x => x.function === b.function);
      
        return i === -1 ? a.push({ function : b.function, process : [b.process] }) : a[i].process.push(b.process), a;
      
    }, []);
    
    
    console.log(arr2)

    【讨论】:

      【解决方案2】:

      var items = [{
        "function": "function_1",
        "process": "process_1"
      }, {
        "function": "function_1",
        "process": "process_2"
      }, {
        "function": "function_1",
        "process": "process_3"
      }, {
        "function": "function_2",
        "process": "process_3"
      }, {
        "function": "function_2",
        "process": "process_4"
      }]
      
      var uniqueFunctionList = [] // to keep track of unique function names
      var resultArr = []          
      items.forEach(item => {
        if (!uniqueFunctionList.includes(item.function)) { // item object doesnt exist
          uniqueFunctionList.push(item.function)           // add unique function name
          let tmp_obj = {}
          tmp_obj['function'] = item.function              // item is unique just push it
          tmp_obj['process'] = [item.process]              // make process array via []
          resultArr.push(tmp_obj)                          
        } else {                                           // function name is not unique
          resultArr.forEach(result => {                    // it is available in resultArr
            if (result.function == item.function) {        // find the function
              result.process.push(item.process)            // push to process array  
            }
          })
        }
      })
      
      console.log(resultArr)

      【讨论】:

        猜你喜欢
        • 2019-09-25
        • 2018-03-10
        • 2019-04-28
        • 2022-11-27
        • 2020-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多