1

I have an array of objects that looks like:

{
    name: 'steve',
    plaintiff:'IRS'
    amount: 5000,
    otherliens:[
        {
            amount:5000,
            plaintiff:'irs'
        },
        {amount:5000, 
         plaintiff:'irs'
        }
    ]
}

i need to send this as a csv so i need to map and iterate over this subarray and flatten it into them ain object like so:

{
    name:'steve',
    plaintiff:'irs',
    amount:5000,
    plaintiff2:'irs',
    amount2:5000,
    plaintiff3:'irs',
    amount3:5000
}

the code i use to normally do this process is by mapping the contents of the original array into a new array with arr.map(a,i =>{ a[i] ? a[i].amount = a[i].amount }) i am able to work the the subarrays that are string based by flat guessing a number of entries (see phones and emails) because if i return null it just returns blank, which in the csv isnt the worst thing. but i cannot do the same because accessing a sub property of an element that doesnt exist obviously wont work. So here is the map im using where emailAddresses is a string array, phoneNumbers is a string array and otherliens is an object array.

any help would be appreciated and bear in mind because it is bulk data transfer and csvs that will have a fixed number of columns in the end, i dont mind null values, so i guess you would take the longest subarray length and use that in all the other objects.

Full code

 prospects.map((list, i) => {

      result[i] 
        ? (result[i].fullName = list.fullName)
          (result[i].First_Name = list.firstName)
          (result[i].Last_Name = list.lastName)
          (result[i].Delivery_Address = list.deliveryAddress)
          (result[i].City = list.city)
          (result[i].State = list.state)
          (result[i].Zip_4 = list.zip4)
          (result[i].County = list.county)
          (result[i].plaintiff= list.plaintiff)
          (result[i].Amount = list.amount)
          (result[i].age = list.age)
          (result[i].dob= list.dob)
          (result[i].snn= list.ssn)   
          (result[i].plaintiff2= list.otherliens[1].plaintiff )
          (result[i].filingDate2= list.otherliens[1].filingDate)
          (result[i].amount2= list.otherliens[1].amount )
          (result[i].plaintiff3= list.otherliens[2].plaintiff)
          (result[i].filingDate3= list.otherliens[2].filingDate )
          (result[i].amount3= list.otherliens[2].amount )
          (result[i].amount4= list.otherliens[3].amount)
          (result[i].plaintiff4= list.otherliens[3].plaintiff )
          (result[i].filingDate4= list.otherliens[3].filingDate )
          (result[i].phone1 = list.phones[0])
          (result[i].phone2 = list.phones[1])
          (result[i].phone3 = list.phones[2])
          (result[i].phone4 = list.phones[3])
          (result[i].phone5 = list.phones[4])
          (result[i].phone6 = list.phones[5])
          (result[i].phone7 = list.phones[6])
          (result[i].phone8 = list.phones[7])
          (result[i].phone9 = list.phones[8])
          (result[i].emailAddress1 = list.emailAddresses[0])
          (result[i].emailAddress2 = list.emailAddresses[1])
          (result[i].emailAddress3 = list.emailAddresses[2])
          (result[i].emailAddress4 = list.emailAddresses[3])
          (result[i].emailAddress5 = list.emailAddresses[4])
          (result[i].emailAddress6 = list.emailAddresses[5])
          (result[i].emailAddress7 = list.emailAddresses[6])

        : (result[i] = {
              Full_Name: list.fullName ,
              First_Name: list.firstName,
              Last_Name: list.lastName,
              Delivery_Address: list.deliveryAddress,
              City: list.city,
              State: list.state,
              Zip_4: list.zip4,
              County: list.county,
              dob: list.dob,
              ssn:list.ssn,
              age:list.age,
              Amount: list.amount,
              plaintiff: list.plaintiff,         
              filingDate: list.filingDate,
              phone1:list.phones[0],
              phone2:list.phones[1],
              phone3:list.phones[3],
              phone4:list.phones[4],
              phone5:list.phones[5],
              phone6:list.phones[6],
              phone7:list.phones[7],      
              phone8:list.phones[8],
              emailAddress1:list.emailAddresses[0],
              emailAddress2:list.emailAddresses[1],
              emailAddress3:list.emailAddresses[2],
              emailAddress4:list.emailAddresses[3],
              emailAddress5:list.emailAddresses[4],
              emailAddress6:list.emailAddresses[5],
              plaintiff2: list.otherliens[1].plaintiff,
              amount2: list.otherliens[1].amount,
              filingDate2: list.otherliens[1].filingDate,
              plaintiff3: list.otherliens[2].plaintiff,
              filingDate3: list.otherliens[2].filingDate,
              amount3: list.otherliens[2].amount,
              plaintiff4: list.otherliens[3].plaintiff,
              amount4: list.otherliens[3].amount,
              filingDate4: list.otherliens[3].filingDate,  
            })
           } ); 

1
  • If you're not using the return value, you should use forEach, not map. Commented Nov 10, 2020 at 0:08

1 Answer 1

2

Use loops to assign properties from the nested arrays, rather than hard-coding the number of items.

I also don't see the need for the conditional expression. Since each input element maps directly to an output element, there won't already be result[i] that needs to be updated.

result = prospects.map(({fullName, firstName, lastName, deliveryAddress, city, state,zip4, county, plaintiff, amount, age, dob, ssn, otherliens, phones, emailAddresses}) => {
  let obj = {
    fullName: fullName,
    First_Name: firstName,
    Last_Name: lastName,
    Delivery_Address: deliveryAddress,
    City: city,
    State: state,
    Zip_4: zip4,
    County: county,
    plaintiff: plaintiff,
    Amount: amount,
    age: age,
    dob: dob,
    ssn: ssn
  };
  otherliens.forEach(({plaintiff, amount}, i) => {
    obj[`plaintiff${i+2}`] = plaintiff;
    obj[`amount${i+1}`] = amount;
  });
  phones.forEach((phone, i) => obj[`phone${i+1}`] = phone);
  emailAddresses.forEach((addr, i) => obj[`emailAddress${i+1}`] = addr);
  return obj;
})

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

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.