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

Efficient way to generate all combinations for an address - Javascript

我们的团队想要根据用户输入的街道、城市、州和邮编生成一个串联地址。问题是很多时候用户可能不会填写所有这四个输入。有没有一种方法可以在不编写 12 个 if 语句的情况下高效地生成连接地址字段的所有组合?

例如,如果用户填写了所有 4 个字段,我们想要 return 这个:

return current.agency_street + ', ' + current.agency_city + ', ' + current.agency_state + ', ' + current.agency_zip;

如果他们除了邮政编码之外的所有内容都已填写,我们想要return这个:

return current.agency_street + ', ' + current.agency_city + ', ' + current.agency_state;

有没有没有所有 if 语句的方法?谢谢!

您可以将所有内容推送到数组并过滤掉虚假值。

var values = [];
values.push(agency_street);
values.push(agency_city);
values.push(agency_state);
values.push(agency_zip);
return values.filter(x => x).join(', ');

fiddle: https://jsfiddle.net/xfqumxox/

如果只设置对象的填充属性并且结果的顺序并不严格重要,则可以使用此方法:

Object.keys(current).map(key => current[key]).filter(val => val).join(", ");

你也可以使用三元运算符

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

一如既往,循环有助于简化事情:

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(", ");