Как проверить, что все аргументы равны, и вернуть строку - PullRequest
0 голосов
/ 19 октября 2018

Я хочу объединить аргументы (все строки), которые передаются в мою функцию вместе с разделителем '|', но если все они являются пустыми строками, то просто передать пустую строку.

У меня есть следующее:

constructString(one: string, two: string, three: string) {
  if (one === '' && two === '' && three === '') {
    return '';
  }
  return [one, two, three].filter(Boolean).join('|')
}

Мой вопрос ... Есть ли проще, большеэлегантный способ выполнить это, или какая-то полезная функция, которую JS имеет, что мне не хватает для выполнения этой задачи?

Ответы [ 4 ]

0 голосов
/ 19 октября 2018

Вы можете использовать ... оператор

function constructString(...args) {
  if (args.every(x => x === '')) {
     return '';
  }
  
  return args.join('|');
}

console.log('[', constructString('a', 'b', 'c'), ']');

console.log('[', constructString('', '', ''), ']');

Для любителей минимализма

function constructString(...args) {
  return args.every(x => x === '') ? '' : args.join('|');
}

console.log('[', constructString('a', 'b', 'c'), ']');

console.log('[', constructString('', '', ''), ']');
0 голосов
/ 19 октября 2018

попробуйте что-то вроде этого

function constructString(one, two, three) {
  if (one === '' && two === '' && three === '') {
    return '';
  }
  return [one, two, three].filter(Boolean).join('|')
}

console.log('result :',constructString('String-1','String-1','String-1'));
0 голосов
/ 19 октября 2018

если все они являются пустыми строками, то просто передать пустую строку.

Вы можете использовать объект arguments, создать массив из него и проверить, все ли они '' используя Array.every, который вернет true или false.Если все пустые, возвращаем ''

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

function constructString() {
  let crtArry = Array.from(arguments).every(function(item) {
    return item === '';
  });
  if (crtArry) {
    return 'Returning empty String' + '';
  } else {
    return Array.from(arguments).filter((item) => {
      return item !== '';
    }).join('|')
  }
}

console.log(constructString('', '', ''))
console.log(constructString('2', '3', ''))
0 голосов
/ 19 октября 2018

Вы можете просто использовать filter только для Boolean значений, что работает и для пустых значений, поскольку они отфильтровываются.

function constructString(one, two, three) {
  
  return [one, two, three].filter(Boolean).join('|')
}
//with Boolean values as string
console.log(constructString('true', 'false', 'true'));

//with blank values as string
console.log(constructString('', '', ''));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...