Удалить квадратную скобку ([]) в json файле node JS - PullRequest
0 голосов
/ 13 февраля 2020

Я хочу удалить квадратную скобку «[]» в json объекте или объединить некоторый массив объекта с одним массивом объекта.

Этот код для подсчета текущего запаса

currentStock : ( req, res, next) => {

    var listed_item = _(arr_items).map( (z) => {

        var result = module.exports.getTransactionAfterDate(z.created_at, z.item_id);

        return result;

    })

    var jsonContent = JSON.stringify(listed_item);

    return res.send(jsonContent);
},


getTransactionAfterDate : (date, item_id) => {

    var result = _(db_transaction).filter( (x) => {

        return x.created_at > date && x.item_id == item_id;

    });

    return result;

}

это "named_item" json результат

[
    [{
        "id": 30608,
        "item_id": "A01001",
        "quantity": 150,
        "status": "OUT",
        "created_at": "2020-02-10 16:11:51",
    }],
    [],
    [{
        "id": 30412,
        "item_id": "A02001",
        "quantity": 53,
        "status": "OUT",
        "created_at": "2020-02-06 14:44:20",
    }, {
        "id": 30482,
        "item_id": "A02001",
        "quantity": 33,
        "created_at": "2020-02-07 15:26:50",
        "updated_at": "2020-02-07 15:26:50",
    }]
]

то, что я хочу, похоже на это

[
    {
        "id": 30608,
        "item_id": "A01001",
        "quantity": 150,
        "status": "OUT",
        "created_at": "2020-02-10 16:11:51",
    },
    {
        "id": 30412,
        "item_id": "A02001",
        "quantity": 53,
        "status": "OUT",
        "created_at": "2020-02-06 14:44:20",
    }, {
        "id": 30482,
        "item_id": "A02001",
        "quantity": 33,
        "created_at": "2020-02-07 15:26:50",
        "updated_at": "2020-02-07 15:26:50",
    }
]

note я попытался объединить "getTransactionAfterDate" внутри "arr_items "карта для объединения всего массива внутри

var temp = [];
var listed_item = _(arr_items).map( (z) => {

    temp = _(temp).concat(module.exports.getTransactionAfterDate(z.created_at, z.item_id));
    var result = temp;

    return result;

})

, но в результате получается пустой массив

[ [], [], [] ]

Ответы [ 3 ]

1 голос
/ 13 февраля 2020

Попробуйте это

currentStock : ( req, res, next) => {
    var items = [];

    _(arr_items).forEach( (z) => {

        var result = module.exports.getTransactionAfterDate(z.created_at, z.item_id);

        result.forEach( item => {
          items.push(item);
        }

    })

    var jsonContent = JSON.stringify(items);

    return res.send(jsonContent);
},
1 голос
/ 13 февраля 2020

Вы можете «сгладить» массив с помощью loda sh, который просто объединит все массивы в один:

_(arr).flatten()

Это должно дать вам один массив ваших объектов, с помощью нет также пустых массивов.

.flatten() в loda sh документы здесь: https://lodash.com/docs/#flatten

Так что это будет что-то вроде этого ( отредактировано основываясь на комментариях ):

currentStock : ( req, res, next) => {

    var listed_item = _(arr_items).map( (z) => {

        var result = module.exports.getTransactionAfterDate(z.created_at, z.item_id);

        return result;

    })

    var flattened = _(listed_item).flatten();

    var jsonContent = JSON.stringify(flattened);

    return res.send(jsonContent);
},

Красиво и просто! (если я правильно понял, что вы пытаетесь сделать :-)

0 голосов
/ 13 февраля 2020

это можно сделать с помощью комбинации _.flatten (для этого требуется sh) и Array.prototype.filter, как показано ниже

let newArray = _.flatten(listed_item.filter(e => e.length > 0))
...