mysql rowdatapacket_arrays – 将此RowDataPacket对象数组缩小为单个对象

在Node.js中,如何将包含相同_id和_NAME值但其他键值不同的RowDataPacket对象数组合并为一个对象?最佳答案提供了一种使用reduce方法和动态模式处理不同键的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值