'Transforme JSON into string array correlated

I'm having a problem into convert json into a string array

I need transform a json into a string array because I will do a INSERT into our database dynamically, because this need work for any json and I don't know how is the JSON that I will receive.

This is my response


    [
        {
            consumer: 'consumer a',
            orders: [{
                orderNumber: 1,
                details: {
                    dates: { deadline: '2022-02-17' },
                    status: [{ id: 1, status: 'Pending', date: '2022-01-01' },
                    { id: 2, status: 'Awaiting Payment', date: '2022-01-02' },
                    { id: 3, status: 'Awaiting Fulfillment', date: '2022-01-02' }]
                }
    
            },
            {
                orderNumber: 2,
                details: {
                    dates: { deadline: '2022-03-17' },
                    status: [{ id: 1, status: 'Pending', date: '2022-01-01' }]
                }
    
            }]
        },
        {
            consumer: 'consumer b',
            orders: [{
                orderNumber: 6,
                details: {
                    dates: { deadline: '2022-02-17' },
                    status: [{ id: 1, status: 'Pending', date: '2022-01-01' }]
                }
    
            },
            {
                orderNumber: 7,
                details: {
                    dates: { deadline: '2022-03-17' },
                    status: [{ id: 1, status: 'Pending', date: '2022-03-01' },
                    { id: 2, status: 'Awaiting Payment', date: '2022-04-02' },
                    { id: 3, status: 'Awaiting Fulfillment', date: '2022-05-02' }]
                }
    
            }]
        }
    ]

I need this result


    ['consumer a', '1', '1'],
        ['consumer a', '1', '2'],
        ['consumer a', '1', '3'],
        ['consumer a', '2', '1'],
        ['consumer b', '6', '1'],
        ['consumer b', '7', '1'],
        ['consumer b', '7', '2'],
        ['consumer b', '7', '3']

I created a map for reach this objective

like this

['consumer', 'consumer.orders.orderNumber', 'consumer.orders.detaisl.status.id']

But can't do that, someone have any idea?



Solution 1:[1]

You can use a reduce function then traverse each order and again for each status, then return the accumulator

 const arr = [
        {
            consumer: 'consumer a',
            orders: [{
                orderNumber: 1,
                details: {
                    dates: { deadline: '2022-02-17' },
                    status: [{ id: 1, status: 'Pending', date: '2022-01-01' },
                    { id: 2, status: 'Awaiting Payment', date: '2022-01-02' },
                    { id: 3, status: 'Awaiting Fulfillment', date: '2022-01-02' }]
                }
    
            },
            {
                orderNumber: 2,
                details: {
                    dates: { deadline: '2022-03-17' },
                    status: [{ id: 1, status: 'Pending', date: '2022-01-01' }]
                }
    
            }]
        },
        {
            consumer: 'consumer b',
            orders: [{
                orderNumber: 6,
                details: {
                    dates: { deadline: '2022-02-17' },
                    status: [{ id: 1, status: 'Pending', date: '2022-01-01' }]
                }
    
            },
            {
                orderNumber: 7,
                details: {
                    dates: { deadline: '2022-03-17' },
                    status: [{ id: 1, status: 'Pending', date: '2022-03-01' },
                    { id: 2, status: 'Awaiting Payment', date: '2022-04-02' },
                    { id: 3, status: 'Awaiting Fulfillment', date: '2022-05-02' }]
                }
    
            }]
        }
    ]


const result = arr.reduce((acc,val)=>{
 val.orders.forEach(o=>o.details.status.forEach(s=>acc.push([val.consumer, o.orderNumber.toString(), s.id.toString()])))
 return acc
},[])

console.log(result)

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 knicholas