如何将这个特定的对象数组映射到按公共键值分组的数组

How to map this specific array of objects to the array grouped by the common key value

我有这个简化的对象数组

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" 
  ]
}
]

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)

献给你我的朋友

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)