arrays – 将此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查询的结果.

最佳答案 对象不能有几个相同的键.

我建议你把这些数据收集到数组中:

    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);

对于不同键的不同行为,我们应该提供一些模式:

function combine(list, schema) {
      return list.reduce((carry, o) => {
        for (var k in o) {
          switch (schema[k]) {
            case 'scalar': carry[k] = o[k]; break;// Overwrite
            default:
            case 'array': 
              if (!carry[k]) carry[k] = [];
              carry[k].push(o[k]);
              break;
          }
        }
        return carry;
      }, {});
    }
    var input = [];
    input.push({id: 1, tag: 'Tag#1'});
    input.push({id: 1, tag: 'Tag#2'});
    input.push({id: 1, tag: 'Tag#3'});
    var res = combine(input, {id: 'scalar', tag: 'array'});
    console.log(res);
点赞