将数组和对象转换为mysql Sequelize + Nodejs中的批量插入

时间:2017-12-07 06:11:46

标签: javascript mysql arrays node.js sequelize.js

这是我的json对象:

    {
    "groups":

 [
        {
            "id": 1,
            "groupname": "Angular",
            "createdAt": "2017-12-05T09:36:05.000Z",
            "updatedAt": "2017-12-05T09:36:05.000Z",
            "contactgroups": [
            {
                "id": 1,
                "contact":
                {
                    "gsm": "12345"
                }
            },
            {
                "id": 3,
                "contact":
                {
                    "gsm": "54321"
                }
            },
            {
                "id": 4,
                "contact":
                {
                    "gsm": "99999"
                }
            }],
            "select": true
        },
        {
            "id": 2,
            "groupname": "React",
            "createdAt": "2017-12-05T09:36:10.000Z",
            "updatedAt": "2017-12-05T09:36:10.000Z",
            "contactgroups": [
            {
                "id": 2,
                "contact":
                {
                    "gsm": "66666"
                }
            },
            {
                "id": 5,
                "contact":
                {
                    "gsm": "54321"
                }
            }],
            "select": true
        },
        {
            "id": 3,
            "groupname": "Vue",
            "createdAt": "2017-12-05T09:36:15.000Z",
            "updatedAt": "2017-12-05T09:36:15.000Z",
            "contactgroups": [
            {
                "id": 6,
                "contact":
                {
                    "gsm": "12345"
                }
            }]
        },
     ],
    "sender": "ifelse",
    "message": "test"
}

我想像这样转换上面的对象:

[
    {"gsm": 12345, "sender": "ifelse", "message": "test"},
    {"gsm": 54321, "sender": "ifelse", "message": "test"},
    {"gsm": 99999, "sender": "ifelse", "message": "test"},
    {"gsm": 66666, "sender": "ifelse", "message": "test"},
    {"gsm": 54321, "sender": "ifelse", "message": "test"},
    {"gsm": 12345, "sender": "ifelse", "message": "test"},

]

然后我只能在sequelize中批量插入。

如何使用for或foreach或任何其他功能?做这个东西?

更好吗?是否可以使用地图?

我想要我最后的json对象,然后只允许sequelize批量创建。

Ps:我想"选择":仅限json gsm数字

2 个答案:

答案 0 :(得分:2)

在你的情况下,我使用for循环来制作JSON对象



 var data={
    "groups":

 [
        {
            "id": 1,
            "groupname": "Angular",
            "createdAt": "2017-12-05T09:36:05.000Z",
            "updatedAt": "2017-12-05T09:36:05.000Z",
            "contactgroups": [
            {
                "id": 1,
                "contact":
                {
                    "gsm": "12345"
                }
            },
            {
                "id": 3,
                "contact":
                {
                    "gsm": "54321"
                }
            },
            {
                "id": 4,
                "contact":
                {
                    "gsm": "99999"
                }
            }],
            "select": true
        },
        {
            "id": 2,
            "groupname": "React",
            "createdAt": "2017-12-05T09:36:10.000Z",
            "updatedAt": "2017-12-05T09:36:10.000Z",
            "contactgroups": [
            {
                "id": 2,
                "contact":
                {
                    "gsm": "66666"
                }
            },
            {
                "id": 5,
                "contact":
                {
                    "gsm": "54321"
                }
            }],
            "select": true
        },
        {
            "id": 3,
            "groupname": "Vue",
            "createdAt": "2017-12-05T09:36:15.000Z",
            "updatedAt": "2017-12-05T09:36:15.000Z",
            "contactgroups": [
            {
                "id": 6,
                "contact":
                {
                    "gsm": "12345"
                }
            }]
        },
     ],
    "sender": "ifelse",
    "message": "test"
 }


    var result=[
        {"gsm": 12345, "sender": "ifelse", "message": "test"},
        {"gsm": 54321, "sender": "ifelse", "message": "test"},
        {"gsm": 99999, "sender": "ifelse", "message": "test"},
        {"gsm": 66666, "sender": "ifelse", "message": "test"},
        {"gsm": 54321, "sender": "ifelse", "message": "test"},
        {"gsm": 12345, "sender": "ifelse", "message": "test"},

    ]
    var arr=[];
    for(var i=0;i<data.groups.length;i++){
       if(data.groups[i].select){
        for(var j=0;j<data.groups[i].contactgroups.length;j++){    arr.push({gsm:data.groups[i].contactgroups[j].contact.gsm,sender:data.sender,message:data.message});    
        }
       }
    }
    console.log(arr);
&#13;
   
&#13;
&#13;
&#13;

答案 1 :(得分:2)

尝试使用lodash

var result = _.flatten(data.groups.map( r => r.contactgroups))
              .map(r => ({ gsm: r.contact.gsm, sender: "ifelse", message: "test" })
);

console.log(result);

更新#2 - 使用过滤器

var result = _.flatten(_.filter(data.groups,{'select': true }).map( r => r.contactgroups))
              .map(r => ({ gsm: r.contact.gsm, sender: "ifelse", message: "test" })
);

console.log(result);