Эффективный способ создания всех комбинаций для адреса - Javascript - PullRequest
0 голосов
/ 24 мая 2018

Наша команда хочет сгенерировать каскадный адрес на основе ввода пользователя для улицы, города, штата и почтового индекса.Проблема заключается в том, что пользователь часто не может заполнить все четыре поля.Есть ли способ эффективно сгенерировать все комбинации для объединенного адресного поля без записи 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 голосов
/ 24 мая 2018

Как всегда, цикл помогает упростить вещи:

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(", ");
0 голосов
/ 24 мая 2018

Вы можете использовать это, если установлены только заполненные свойства объекта и порядок результатов не имеет строго значения:

Object.keys(current).map(key => current[key]).filter(val => val).join(", ");
0 голосов
/ 24 мая 2018

Вы также можете использовать троичный оператор

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 : '');
0 голосов
/ 24 мая 2018

Вы можете выдвинуть все в массив и отфильтровать ложные значения.

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/

...