gpt4 book ai didi

arrays - 将这个 RowDataPacket 对象数组缩小为单个对象

转载 作者:搜寻专家 更新时间:2023-10-31 23:20:28 25 4
gpt4 key购买 nike

我正在使用 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);

关于arrays - 将这个 RowDataPacket 对象数组缩小为单个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38847995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com