Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

creating object from multiple array properties

I am looping through an object that contains multiple telephone numbers as keys and arrays with objects as values.

I have written a reduce method that groups all of the schedules together, except for one issue.

if you run the snippet you see that res is: {trackingNumber: [ [Array] ]}

I need the object to look like: {trackingNumber: [Array]}

The issue I continue to run into is trying to pop or slice or do anything by initial index makes the first array that is concatted (Object.values(res)) basically it enumerates the first object of that array as the first 7 elements of the value associated with tracking number.

{trackingNumber: [0:string, 1:string, 2:string, 3: {object of strings in 0 1 and 2}]}

Any help would be appreciated.

let todayNewTollFree = [
{paymentSchedule: [{amount:500},{amount:500},{amount:500},{amount:500},{amount:500},{amount:500},],
tracking: "+18003160182"},
{paymentSchedule: [{amount:500},{amount:500},{amount:500},{amount:500},{amount:500},{amount:500},{amount:500},],
tracking: "+18003160182"
},
{
paymentSchedule: [],
tracking: "+12134105385"
},
{
paymentSchedule: [{amount:500},{amount:500},{amount:500},{amount:500},],
tracking: "+18007084605"
},
{
paymentSchedule:[{amount:500},{amount:500},{amount:500},{amount:500},{amount:500},],
tracking: "+18007100629"
}
]

let test = todayNewTollFree.reduce(function (res, obj) {
    let key = obj.tracking;

    if (res[key]) {
      res[key] = res[key].map((key) =>
        [key].flat().concat(obj.paymentSchedule)
      );
    } else res[key] = [obj.paymentSchedule];
    for (const tracking in res) {
      let values = Object.values(res[key]).flat();

      console.log(tracking);
      console.log(values);
    }
    return res;
  }, {});
      
      console.log(test)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

The for in loop creates a flat array correctly but every attempt I have to go back and call or assign tracking to the newly created array isn't working.

like image 581
Mickey Gray Avatar asked Feb 14 '26 16:02

Mickey Gray


1 Answers

When adding a new key to the object, you should not place it inside an array literal [...] (as that creates an array whose first element is an array) and should simply assign the array itself to the property. Furthermore, when adding to an array, Array#map is not necessary and Array#concat will do the job.

let todayNewTollFree = [ {paymentSchedule: [{amount:500},{amount:500},{amount:500},{amount:500},{amount:500},{amount:500},], tracking: "+18003160182"}, {paymentSchedule: [{amount:500},{amount:500},{amount:500},{amount:500},{amount:500},{amount:500},{amount:500},], tracking: "+18003160182" }, { paymentSchedule: [], tracking: "+12134105385" }, { paymentSchedule: [{amount:500},{amount:500},{amount:500},{amount:500},], tracking: "+18007084605" }, { paymentSchedule:[{amount:500},{amount:500},{amount:500},{amount:500},{amount:500},], tracking: "+18007100629" } ]
let test = todayNewTollFree.reduce(function (res, obj) {
  let key = obj.tracking;
  if (res[key]) {
    res[key] = res[key].concat(obj.paymentSchedule)
  } else res[key] = obj.paymentSchedule;
  return res;
}, {});
console.log(test)
like image 166
Unmitigated Avatar answered Feb 17 '26 05:02

Unmitigated



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!