我们的团队希望根据用户对街道,城市,州和邮政编码的输入生成连锁地址。问题很多时候,用户可能无法填写所有这四个输入。有没有办法有效地为连接的地址字段生成所有组合而无需编写12个if语句?
例如,如果用户填写了所有4个字段,我们想要返回:
return current.agency_street + ', ' + current.agency_city + ', ' + current.agency_state + ', ' + current.agency_zip;
如果他们已经填写了除邮政编码以外的所有内容,我们希望将其返回:
return current.agency_street + ', ' + current.agency_city + ', ' + current.agency_state;
如果没有所有if语句,有没有办法做到这一点?谢谢!
答案 0 :(得分:4)
您可以将所有数据推送到数组并过滤掉虚假值。
var values = [];
values.push(agency_street);
values.push(agency_city);
values.push(agency_state);
values.push(agency_zip);
return values.filter(x => x).join(', ');
答案 1 :(得分:2)
一如既往,循环有助于简化事情:
let result = "";
for(const key of ["street", "city", "state", "zip"]) {
const value = current["agency_" + key];
if(value) result += (result && ",") + value;
}
return result;
功能风格可能更优雅:
return ["street", "city", "state", "zip"].map(key => current["agency_" + key]).filter(Boolean).join(", ");
答案 2 :(得分:0)
如果只设置了对象的填充属性并且结果的顺序不严格,则可以使用此选项:
Object.keys(current).map(key => current[key]).filter(val => val).join(", ");
答案 3 :(得分:0)
您也可以使用三元运算符
return (current.agency_street ? current.agency_street : '') + (current.agency_city ? ',' + current.agency_city : '') + (current.agency_state ? ',' + current.agency_state : '') + (current.agency_zip ? ',' + current.agency_zip : '');