将RowDataPacket对象的数组缩放到一个对象中

我正在使用node.js

我有下面这个RowDataPacket对象的数组;

{ _ID: 4, _NAME: "Switch4", _CASE_COUNTER: 1, _CASE_ID: 1 }, { _ID: 4, _NAME: "Switch4", _CASE_COUNTER: 2, _CASE_ID: 2 } { _ID: 4, _NAME: "Switch4", _CASE_COUNTER: 3, _CASE_ID: 3 } 

我想这个RowDataPacket对象的数组缩小到一个单一的对象。 收缩之后,会看起来像这样;

 { _ID: 4, _NAME: "Switch4", _CASE_COUNTER: 1, _CASE_ID: 1, _CASE_COUNTER: 2, _CASE_ID: 2, _CASE_COUNTER: 3, _CASE_ID: 3 } 

_ID和_NAME在RowDataPacket对象的数组中具有相同的值。 其他键将有不同的值。 这怎么能在node.js v4.7.x中完成?

编辑:它不是原始问题中提到的json对象的数组。 它是RowDataPacket对象的数组,它是MySQL查询的结果。

对象不能有多个相同的键。
我build议你将这些数据收集到数组中:

  function combine(list) { return list.reduce((carry, o) => { for (var k in o) { if (!carry[k]) carry[k] = []; carry[k].push(o[k]); } return carry; }, {}); } var input = []; input.push({id: 1, tag: 'Tag#1'}); input.push({id: 2, tag: 'Tag#2'}); input.push({id: 3, tag: 'Tag#3'}); var res = combine(input); console.log(res); 

你不能在一个对象中使用相同的索引,但是你可以用不同的方式实现它。缩小的数据格式应该如下所述

 { 4:{ //here 4 is _ID _NAME:"Switch4", _CASE_COUNTER:[1,2,3], // array of all _CASE_COUTER for same _ID _CASE_ID:[1,2,3] // array of all _CASE_IDfor same _ID } } 

让我们假设你的数据结构是

 var data=[{ _ID: 4, _NAME: "Switch4", _CASE_COUNTER: 1, _CASE_ID: 1 }, { _ID: 4, _NAME: "Switch4", _CASE_COUNTER: 2, _CASE_ID: 2 }, { _ID: 4, _NAME: "Switch4", _CASE_COUNTER: 3, _CASE_ID: 3 }]; 

您可以按照以下方式收缩数据

 shrink_data={}; for(i=0 ; i < data.length; i++){ if(typeof shrink_data[data[i]._ID] == "undefined") { shrink_data[data[i]._ID]={ _NAME: data[i]._NAME, _CASE_COUNTER: [data[i]._CASE_COUNTER], _CASE_ID: [data[i]._CASE_ID] }; } else { shrink_data[data[i]._ID]._CASE_COUNTER.push(data[i]._CASE_COUNTER); shrink_data[data[i]._ID]._CASE_ID.push(data[i]._CASE_ID); } } console.log(JSON.stringify(shrink_data)); // {"4":{_NAME:"Switch4",_CASE_COUNTER:[1,2,3],_CASE_ID:[1,2,3]}}