У меня есть массив объектов, который выглядит так:

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

Мне нужно отправить это как csv, поэтому мне нужно сопоставить и перебрать этот подмассив и сгладить его в объекте ain следующим образом:

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

Код, который я обычно использую для этого процесса, заключается в отображении содержимого исходного массива в новый массив с помощью arr.map(a,i =>{ a[i] ? a[i].amount = a[i].amount }) . Я могу работать с подмассивами, которые являются строкой, путем плоского угадывания количества записей (см. телефоны и электронные письма), потому что, если я верну ноль, он просто вернет пустое значение, что в CSV не самое худшее. но я не могу сделать то же самое, потому что доступ к дополнительному свойству элемента, который не существует, очевидно, не сработает. Итак, вот карта, которую я использую, где emailAddresses - это строковый массив, phoneNumbers - строковый массив, а otherliens - объектный массив.

Любая помощь будет оценена и учтена, потому что это массовая передача данных и csvs, которые будут иметь фиксированное количество столбцов в конце, я не возражаю против нулевых значений, поэтому я предполагаю, что вы бы взяли самую длинную длину подмассива и использовали это во всех другие объекты.

Полный код

 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
Mickey Gray 10 Ноя 2020 в 03:01

1 ответ

Лучший ответ

Используйте циклы для назначения свойств из вложенных массивов вместо жесткого кодирования количества элементов.

Я также не вижу необходимости в условном выражении. Поскольку каждый элемент ввода отображается непосредственно на элемент вывода, уже не будет result[i], который нужно обновлять.

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;
})
1
Barmar 10 Ноя 2020 в 00:20