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

标签 javascript jquery mysql arrays node.js

在我的 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});
});

最佳答案

足够简单,但非常具体。

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

关于javascript - NodeJs 从 MySQL 查询结果创建新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55489811/

相关文章:

javascript - 需要修改代码以排除数组中存在的所有值

javascript - 从模糊事件重新聚焦元素时防止第二个元素模糊(仅限 IE8)

javascript - hammer.js - ipad 上的拖动事件未连续触发

javascript - 如何在移动页面末尾自动显示 "load more"

jquery - 滑动切换嵌套有序列表

jquery - 未捕获的 RangeError : Maximum call stack size exceeded, Chrome JS 错误

javascript - 通过 Python 从动态 javascript 页面提取数据

mysql - 如何在mysql中if条件然后相乘?

mysql - 使用相同的表和属性返回不同类型的人

asp.net - 可扩展性案例研究