Как изменить формат массива в узле js из 1 строки стать другим объектом - PullRequest
2 голосов
/ 19 сентября 2019

У меня есть такой json:

{
    "status": 1,
    "message": "ok",
    "data": [
        {
            "tenor": "23"
        },
        {
            "tenor": "17"
        },
        {
            "tenor": "37"
        },
        {
            "tenor": "27,29"
        },
        {
            "tenor": "33,35"
        }
    ]
}

, и я хочу, чтобы результат был примерно таким:

{ "status": 1, "message": "ok", "data": [ { "tenor": "23" }, { "tenor": "17" }, { "tenor": "37" }, { "tenor": "27" }, { "tenor": "29" }, { "tenor": "33" }, { "tenor": "35" } ] }

Что я пробовал:

var arrayCoba = [];
var array1 = { "status": 1, "message": "ok", "data": [ { "tenor": "23" }, { "tenor": "17" }, { "tenor": "37" }, { "tenor": "27,29" }, { "tenor": "33,35" } ] }

for(var i = 0; i<array1.data.length; i++){
    var string = array1.data[i].tenor;
    var substring = ",";

    if(string.includes(substring) == true){
        var tenor = array.data[i].tenor;
        var tenorArr = tenor.split(',');
        var dataTenor = tenorArr.map(tenor => ({ tenor }));
        arrayCoba.push(dataTenor);
    }
 }

 var dataHasil = array1.data.concat(arrayCoba);

 return res.json({status:1,message:'ok',data:dataHasil}); 

но результат, который я получаю:

{
    "status": 1,
    "message": "ok",
    "data": [
        {
            "tenor": "23"
        },
        {
            "tenor": "17"
        },
        {
            "tenor": "37"
        },
        {
            "tenor": "27,29"
        },
        {
            "tenor": "33,35"
        },
        [
            {
                "tenor": "27"
            },
            {
                "tenor": "29"
            }
        ],
        [
            {
                "tenor": "33"
            },
            {
                "tenor": "35"
            }
        ]
    ]
}

Кто-нибудь может мне помочь?Спасибо ..

Ответы [ 4 ]

2 голосов
/ 19 сентября 2019

var dataTenor = tenorArr.map(tenor => ({ tenor })); возвращает массив теноровых объектов.arrayCoba.push(dataTenor); добавить массив в другой массив и для этого вы получите массив в массиве.

используйте оператор распространения -> arrayCoba.push(...dataTenor);

for (var i = 0; i < array1.data.length; i++) {
    var string = array1.data[i].tenor;
    var substring = ",";

    if (string.includes(substring) == true) {
        var tenor = array1.data[i].tenor;
        var tenorArr = tenor.split(',');
        var dataTenor = tenorArr.map(tenor => ({
            tenor
        }));
        arrayCoba.push(...dataTenor);
    } else {
        arrayCoba.push(array1.data[i]);
    }
}

var dataHasil = arrayCoba;

ОБНОВЛЕНИЕ : еще один способ с map operator.

var substring = ',';

var copyDataTenors = array1.data;
var arrayCoba = "".concat(copyDataTenors
    .map(obj => obj.tenor))
    .split(substring)
    .map(tenorString => ({
        'tenor': tenorString
    }))

var dataHasil = arrayCoba;
1 голос
/ 19 сентября 2019

Вы можете сделать это, как показано ниже:

function test() {
    let obj = { "status": 1, "message": "ok", "data": [ { "tenor": "23" }, { "tenor": "17" }, { "tenor": "37" }, { "tenor": "27,29" }, { "tenor": "33,35" } ] }
    let res = [];
    obj.data
        .map(item => item.tenor.split(','))
        .forEach(tenors => {
            tenors.forEach(tenor => res.push({tenor}));
        });

    obj.data = res;
    return obj;
}

После вызова вышеуказанного метода он возвращает:

{"status":1,"message":"ok","data":[{"tenor":"23"},{"tenor":"17"},{"tenor":"37"},{"tenor":"27"},{"tenor":"29"},{"tenor":"33"},{"tenor":"35"}]}
0 голосов
/ 19 сентября 2019

Вы использовали результаты, возвращенные картой неверно, вы можете использовать оператор распространения, как упомянуто Джоном, чтобы исправить это.

Вы можете сделать что-то вроде этого:

var arrayCoba = [];
var array1 = { "status": 1, "message": "ok", "data": [ { "tenor": "23" }, { "tenor": "17" }, { "tenor": "37" }, { "tenor": "27,29" }, { "tenor": "33,35" } ] }

for(var i = 0; i<array1.data.length; i++){
    var string = array1.data[i].tenor;
    var substring = ",";

    if(string.includes(substring) == true){
        var tenor = array1.data[i].tenor;
        var tenorArr = tenor.split(',');
        var dataTenor = tenorArr.map(tenor => ({ "tenor" : tenor }));
        arrayCoba.push(...dataTenor);
    } else {
        arrayCoba.push({"tenor": array1.data[i].tenor})
    }

 }
 return res.json({status:1,message:'ok',data : arrayCoba}); 

Джон, dacost использовал почти ту же логику, раньше ее не видел, поэтому разместил это.

0 голосов
/ 19 сентября 2019

вы получите результат из mongodb после того, как результат помещен в функцию JSON.stringify, чем получите такой результат "{" name ": 5," value ": 6}"

...