生成地址的所有组合的有效方法 - Javascript

时间:2018-05-24 15:43:33

标签: javascript string-concatenation servicenow

我们的团队希望根据用户对街道,城市,州和邮政编码的输入生成连锁地址。问题很多时候,用户可能无法填写所有这四个输入。有没有办法有效地为连接的地址字段生成所有组合而无需编写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语句,有没有办法做到这一点?谢谢!

4 个答案:

答案 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(', ');

小提琴:https://jsfiddle.net/xfqumxox/

答案 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 : '');