Angular12中如何为单名称下的地址数组拼接地址字段
Angular 12 地址拼接解决方案
针对你提到的两种JSON结构,以下是修正后的TS处理逻辑,可实现正确的地址拼接:
第一种结构:单ProfileName下多索引地址数组处理
示例JSON结构
{ "ProfileName": "John Doe", "AddressLine1": ["123 Main St", "456 Oak Ave"], "AddressLine2": ["Apt 4B", "Suite 100"], "AddressLine3": ["", ""], "AddressLine4": ["", ""], "City": ["New York", "Chicago"], "Zip": ["10001", "60601"], "State": ["NY", "IL"] }
处理函数
formatSingleProfileAddresses(data: any): string[] { const addresses: string[] = []; // 以AddressLine1的长度为基准,确保索引完全对应 const addressCount = data.AddressLine1?.length || 0; for (let i = 0; i < addressCount; i++) { // 过滤空地址行,避免多余逗号 const validAddressLines = [ data.AddressLine1[i], data.AddressLine2[i], data.AddressLine3[i], data.AddressLine4[i] ].filter(line => line?.trim()); // 拼接地址主体+城市/州/邮编 const addressBody = validAddressLines.join(', '); const cityStateZip = `${data.City[i]}, ${data.State[i]} ${data.Zip[i]}`; // 组合完整行(含ProfileName) addresses.push(`${data.ProfileName}: ${addressBody}, ${cityStateZip}`); } return addresses; }
第二种结构:含LicenseInfo数组的地址处理
示例JSON结构
{ "ProfileName": "Jane Smith", "LicenseInfo": [ { "AddressLine1": "789 Pine Rd", "AddressLine2": "", "City": "Los Angeles", "Zip": "90001", "State": "CA" }, { "AddressLine1": "321 Cedar Ln", "AddressLine2": "Unit 7", "City": "Houston", "Zip": "77001", "State": "TX" } ] }
处理函数
formatLicenseAddresses(data: any): string[] { const addresses: string[] = []; if (data.LicenseInfo && Array.isArray(data.LicenseInfo)) { data.LicenseInfo.forEach(license => { // 过滤空地址行 const validAddressLines = [ license.AddressLine1, license.AddressLine2 ].filter(line => line?.trim()); const addressBody = validAddressLines.join(', '); // 组合完整行(含ProfileName和当前License的State) addresses.push(`${data.ProfileName}: ${addressBody}, ${license.City}, ${license.State} ${license.Zip}`); }); } return addresses; }
调用示例
// 处理第一种结构数据 const firstTypeData = { /* 第一种JSON数据 */ }; const firstResult = this.formatSingleProfileAddresses(firstTypeData); // 处理第二种结构数据 const secondTypeData = { /* 第二种JSON数据 */ }; const secondResult = this.formatLicenseAddresses(secondTypeData);
内容的提问来源于stack exchange,提问作者Bhrungarajni
相关产品推荐
相关产品推荐

