AbhiSam
AbhiSam

Reputation: 105

how to make specific properties of object as array of object in javascript and add it to same object

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)
}

Upvotes: 0

Views: 54

Answers (3)

lejlun
lejlun

Reputation: 4419

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);

Upvotes: 2

Rateb Habbab
Rateb Habbab

Reputation: 1789

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)

Upvotes: 2

NeNaD
NeNaD

Reputation: 20354

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);

Upvotes: 0

Related Questions