0

I need to transform the below array of objects into a modified array of object

obj = [{
    org_id: 'CLTINTGBK0001',  
    rate: 8,
    qty: 500,
    total_rate: 35000
  },
  {
    org_id: 'CLTINTGBK0001',  
    rate: 7,
    qty: 800,
    total_rate: 38000
  }
]

Goal:

  obj =  [  {
        org_id: 'CLTINTGBK0001',  
       "qty": [
            { 
                "qty": 500,
                "rate":8
            }
        ],
        total_rate: 38000
      },
      {
        org_id: 'CLTINTGBK0001',  
       "qty": [
            { 
                "qty": 800,
                "rate":7
            }
        ],
        total_rate: 38000
      }
    ]

I have the below code however it's not working. I am trying to loop the array of obect and created different array and object and push object to array and add the array to each object of array.

let obj1 = {}
let qrty
let qty = []
for (let i = 0; i < arr.length; i++) {
    qrt1 = arr[i].qty
    rate1 = arr[i].rate
    console.log(qrty)
    obj1.qty = qrt1;
    obj1.rate = rate1;

    qty.push(obj1);
    arr[i].qty = qty
    console.log('arr', arr)
}
3
  • Wait. Both total_rate should be 38000? Or the first one should be 35000? Commented Sep 13, 2021 at 20:16
  • sorry first one should 35000 Commented Sep 14, 2021 at 3:23
  • If there's only going to be one object in the qty array why have the array at all. Why not just qty: { amount: 5, rate: 3 }? Commented Sep 14, 2021 at 6:01

3 Answers 3

2

You can do:

const obj = [{
org_id: 'CLTINTGBK0001',  
rate: 8,
qty: 500,
total_rate: 35000
  },
  {
org_id: 'CLTINTGBK0001',  
rate: 7,
qty: 800,
total_rate: 38000
  }
]

var newObject = []

obj.forEach(element => {

var newElem = {}
for (const [key, value] of Object.entries(element)){
    if(key == 'qty'){
        newElem[key]= {
            qty: element['qty'],
            rate: element['rate'],
        }
    }else if (key == 'rate'){
        continue
    }else{
        newElem[key] = value
    }
}

newObject.push(newElem)
});

console.log(newObject)

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

Comments

2

You can do this using Array#map and Destructuring Assignment:

const obj = [
  { org_id: 'CLTINTGBK0001', rate: 8, qty: 500, total_rate: 35000 },
  { org_id: 'CLTINTGBK0001', rate: 7, qty: 800, total_rate: 38000 },
];

let res = obj.map(({ qty, rate, ...rest }) => ({
  ...rest,
  qty: [{ qty, rate }],
}));

console.log(res);

Comments

0

You can do it like this:

let  obj = [
  { org_id: 'CLTINTGBK0001', rate: 8, qty: 500, total_rate: 35000 },
  { org_id: 'CLTINTGBK0001', rate: 7, qty: 800, total_rate: 38000 }
];

obj = obj.map((item)=> {
  return {
    org_id: item.org_id,
    total_rate: item.total_rate,
    qty:[   {   qty: item.qty, rate:item.rate } ]
  }
});

console.log(obj);

Comments

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.