0
let responseData = [
  {
    type: 'element',
    name: 'ns2:VehicleInfo',
    elements: [
      {
        type: 'element',
        name: 'ns2:price',
        elements: [
          {
            type: 'text',
            text: '123',
          },
        ],
      },
      {
        type: 'element',
        name: 'ns2:model',
        elements: [
          {
            type: 'text',
            text: 'vento',
          },
        ],
      },
      {
        type: 'element',
        name: 'ns2:brand',
        elements: [
          {
            type: 'text',
            text: 'Vw',
          },
        ],
      },
      {
        type: 'element',
        name: 'ns2:date',
        elements: [
          {
            type: 'text',
            text: '29 Nov 2022',
          },
        ],
      },
      {
        type: 'element',
        name: 'ns2:vin',
        elements: [
          {
            type: 'text',
            text: '1',
          },
        ],
      },
    ],
  },
  {
    type: 'element',
    name: 'ns2:VehicleInfo',
    elements: [
      {
        type: 'element',
        name: 'ns2:price',
        elements: [
          {
            type: 'text',
            text: '10012',
          },
        ],
      },
      {
        type: 'element',
        name: 'ns2:model',
        elements: [
          {
            type: 'text',
            text: '4matic',
          },
        ],
      },
      {
        type: 'element',
        name: 'ns2:brand',
        elements: [
          {
            type: 'text',
            text: 'BMW',
          },
        ],
      },
      {
        type: 'element',
        name: 'ns2:date',
        elements: [
          {
            type: 'text',
            text: '29 Nov 2022',
          },
        ],
      },
      {
        type: 'element',
        name: 'ns2:vin',
        elements: [
          {
            type: 'text',
            text: '2',
          },
        ],
      },
    ],
  },
]

Using JavaScript above data need to be formatted like

let obj = \[
{
id: '1',
vin: '1',
brand: 'Vw',
model: 'vento',
date: '22/11/22',
price: '123',
},
{
id: '2',
vin: '2',
brand: 'BMW',
model: '4matic',
date: '22/11/22',
price: '10012',
},
{
id: '3',
vin: '3',
brand: 'TATA',
model: 'Nano',
date: '22/11/22',
price: '$10000',
},
\];`
0

3 Answers 3

5

use map with reduce

let responseData = [
  {
    type: 'element',
    name: 'ns2:VehicleInfo',
    elements: [
      {
        type: 'element',
        name: 'ns2:price',
        elements: [
          {
            type: 'text',
            text: '123',
          },
        ],
      },
      {
        type: 'element',
        name: 'ns2:model',
        elements: [
          {
            type: 'text',
            text: 'vento',
          },
        ],
      },
      {
        type: 'element',
        name: 'ns2:brand',
        elements: [
          {
            type: 'text',
            text: 'Vw',
          },
        ],
      },
      {
        type: 'element',
        name: 'ns2:date',
        elements: [
          {
            type: 'text',
            text: '29 Nov 2022',
          },
        ],
      },
      {
        type: 'element',
        name: 'ns2:vin',
        elements: [
          {
            type: 'text',
            text: '1',
          },
        ],
      },
    ],
  },
  {
    type: 'element',
    name: 'ns2:VehicleInfo',
    elements: [
      {
        type: 'element',
        name: 'ns2:price',
        elements: [
          {
            type: 'text',
            text: '10012',
          },
        ],
      },
      {
        type: 'element',
        name: 'ns2:model',
        elements: [
          {
            type: 'text',
            text: '4matic',
          },
        ],
      },
      {
        type: 'element',
        name: 'ns2:brand',
        elements: [
          {
            type: 'text',
            text: 'BMW',
          },
        ],
      },
      {
        type: 'element',
        name: 'ns2:date',
        elements: [
          {
            type: 'text',
            text: '29 Nov 2022',
          },
        ],
      },
      {
        type: 'element',
        name: 'ns2:vin',
        elements: [
          {
            type: 'text',
            text: '2',
          },
        ],
      },
    ],
  },
]

const result =  responseData.map(item => {
    return item.elements.reduce((acc, item) => {
       return {
         ...acc,
         [item.name.replace('ns2:', '')] : item.elements[0].text
       }
    
    }, {})
})

console.log(result)

Sign up to request clarification or add additional context in comments.

Comments

2

@Sachila Ranawaka's example works fine. If you wanna add the id, too like in your preview, so modify the map with a second parameter (the index).

let responseData = [
  {
    type: 'element',
    name: 'ns2:VehicleInfo',
    elements: [
      {
        type: 'element',
        name: 'ns2:price',
        elements: [
          {
            type: 'text',
            text: '123',
          },
        ],
      },
      {
        type: 'element',
        name: 'ns2:model',
        elements: [
          {
            type: 'text',
            text: 'vento',
          },
        ],
      },
      {
        type: 'element',
        name: 'ns2:brand',
        elements: [
          {
            type: 'text',
            text: 'Vw',
          },
        ],
      },
      {
        type: 'element',
        name: 'ns2:date',
        elements: [
          {
            type: 'text',
            text: '29 Nov 2022',
          },
        ],
      },
      {
        type: 'element',
        name: 'ns2:vin',
        elements: [
          {
            type: 'text',
            text: '1',
          },
        ],
      },
    ],
  },
  {
    type: 'element',
    name: 'ns2:VehicleInfo',
    elements: [
      {
        type: 'element',
        name: 'ns2:price',
        elements: [
          {
            type: 'text',
            text: '10012',
          },
        ],
      },
      {
        type: 'element',
        name: 'ns2:model',
        elements: [
          {
            type: 'text',
            text: '4matic',
          },
        ],
      },
      {
        type: 'element',
        name: 'ns2:brand',
        elements: [
          {
            type: 'text',
            text: 'BMW',
          },
        ],
      },
      {
        type: 'element',
        name: 'ns2:date',
        elements: [
          {
            type: 'text',
            text: '29 Nov 2022',
          },
        ],
      },
      {
        type: 'element',
        name: 'ns2:vin',
        elements: [
          {
            type: 'text',
            text: '2',
          },
        ],
      },
    ],
  },
]

const result =  responseData.map((item, index) => {
    return item.elements.reduce((acc, item) => {
       return {
         ...acc,
         id: index+1,
         [item.name.replace('ns2:', '')] : item.elements[0].text
       }
    
    }, {})
})

console.log(result)

Comments

0

You can try this(as a more readable way I guess) other than the other answers:

let obj = responseData.map((element,index)=>{
  const object={};
  object.id=index+1;
  object.vin=element.elements[4].elements[0].text;
  object.brand=element.elements[2].elements[0].text;
  object.model=element.elements[1].elements[0].text;
  object.date=element.elements[3].elements[0].text;
  object.price=element.elements[0].elements[0].text
  return object    
})

1 Comment

Not really scalable unfortunately.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.