Лучше рассматривать это как две разные условные строки, а затем соединять их вместе:
let string1;
if (url1) {
string1 = 'The url 1 is ' + url1 + '.';
} else {
string1 = 'There isnt data for url1.';
}
let string2;
if (url2) {
string2 = 'Url2 is ' + url2;
} else {
string2 = 'There isnt data for url2';
}
let finalString = string1 + string2;
Это позволяет вам рассуждать о полученной строке более прямым способом, чем рассматривать каждый возможный случай сразу,Только с двумя переменными у вас есть 4 возможных результата, а с 4 у вас будет 16 .
Разделение каждой переменной означает, что вам не нужно заботиться о других возможностях, когда вы генерируете каждую подстроку.
Вы можете еще больше упростить эту задачу, используя шаблоны.В этом случае вы можете отделить логику генерации строк в другом месте, чтобы сосредоточиться на разных вещах в разных областях
- выяснить, каким должно быть каждое отдельное сообщение
- выяснить, как их отобразить
Например, вы можете захотеть стандартизировать сообщения и получить что-то вроде:
function makeSubMessage(url, name) {
if (url) {
return `The $[name} is ${url}`;
} else {
return `No data for ${name}`;
}
}
/* ... */
let string1 = makeSubMessage(url1, "Url1");
, что позволит вам легче менять формат сообщений, не касаясь их.как они затем представляются.
Когда вы представляете их, вы можете захотеть, чтобы каждое сообщение было отдельной строкой, а не просто одной строкой, поэтому результат не должен зависеть от того, какие подмежа:
function(urls) {
let finalString = "";
for (let i = 0; i < urls.length; i++) {
let subMessage = makeSubMessage(urls[i], "Url" + (i + 1));
finalString += subMessage;
finalString += "\n"
}
return finalString;
}
Или вы можете полностью изменить эту реализацию:
function(urls) {
let finalString = urls
.map((url, i) => makeSubMessage(url, "Url" + (i + 1)))
.join("\n")
return finalString;
}
или изменить, чтобы отобразить их как маркеры HTML, возможно:
function(urls) {
let finalString = urls
.map((url, i) => makeSubMessage(url, "Url" + (i + 1)))
.map(subMessage => `<li>${subMessage}</li>`)
.join("<br/>")
return `<ul>${finalString}</ul>`;
}
или что-нибудь еще.Дело в том, что проблемы теперь разделены.