NodeJs 从 MySQL 查询结果创建新数组

Posted

技术标签:

【中文标题】NodeJs 从 MySQL 查询结果创建新数组【英文标题】:NodeJs create new array from MySQL query result 【发布时间】:2019-08-24 16:00:44 【问题描述】:

在我的NodeJs 项目中,我想创建新的array 表单mysql 查询结果。

这是我的结果:

[
    
        "availabilityId": 1,
        "dayName": 1,
        "fromTime": "05:30:00",
        "toTime": "10:00:00"
    ,
    
        "availabilityId": 2,
        "dayName": 1,
        "fromTime": "10:30:00",
        "toTime": "06:00:00"
    ,
    
        "availabilityId": 3,
        "dayName": 2,
        "fromTime": "16:30:00",
        "toTime": "22:00:00"
    
]

在此结果中,两个数据的dayName 相同。

这是我的预期结果

[
       
        "dayName": 1,
        "time":[
            
                "availabilityId": 1,
                "fromTime": "05:30:00",
                "toTime": "10:00:00"
            ,
            
                "availabilityId": 2,
                "fromTime": "10:30:00",
                "toTime": "06:00:00"
            
        ]
    ,
       
        "dayName": 2,
        "time":[
            
                "availabilityId": 3,
                "fromTime": "16:30:00",
                "toTime": "22:00:00"
            
        ]
    
]

我的代码:

CubbersAvailability.findAll(
    
        where:
            cubbersId:1,
            userId:2
        ,
        attributes:['availabilityId', 'dayName', 'fromTime', 'toTime']
    
).then(availabilityList =>
    res.send(availabilityList);
    // code for create new array
).catch(error=>
    res.status(403).send(status: 'error', resCode:200, msg:'Internal Server Error...!', data:error);
);

【问题讨论】:

【参考方案1】:

足够简单,但非常具体。

const source = [
    
        "availabilityId": 1,
        "dayName": 1,
        "fromTime": "05:30:00",
        "toTime": "10:00:00"
    ,
    
        "availabilityId": 2,
        "dayName": 1,
        "fromTime": "10:30:00",
        "toTime": "06:00:00"
    ,
    
        "availabilityId": 3,
        "dayName": 2,
        "fromTime": "16:30:00",
        "toTime": "22:00:00"
    
];

function createNewArray(source) 

  let output = [];

  source.forEach(entry => 

    let dayName = entry.dayName;
    let time = 
      "availabilityId": entry.availabilityId,
      "fromTime": entry.fromTime,
      "toTime": entry.toTime
    ;

    if (output[dayName] === undefined) 
      output[dayName] = 
        "dayName": entry.dayName,
        "time": []
      ;
    

    output[dayName].time.push(time);

  );

  output.shift(); //shouldn't be needed, but since [0] is empty, necessary.

  return output;



console.log(createNewArray(source));

【讨论】:

感谢您的代码正常工作,但结果来自链接ibb.co/bHTkw6w 但是如果相同的dayName 表示同一数组中的数据,请查看我的预期结果 兄弟你在吗 更正了结构,但由于某种原因,它在开头添加了一个undefined,猜测是因为数组中没有0,只需检查条目是否为undefined如果是则跳过它。 现在它正在工作,但最重要的是得到undefined

以上是关于NodeJs 从 MySQL 查询结果创建新数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在nodeJS的mysql查询中将值推送到数组?

PHP从获取数组创建一个数组

在返回的mysql结果中查找行数(nodejs)

在查询Mysql Nodejs时结果未定义

从 MySQL 结果创建 PHP 数组

从 mysql 结果创建一个 id 数组