如何检查所有参数是否都相同并返回字符串

时间:2018-10-19 09:23:06

标签: javascript typescript if-statement

我想将传递给我的函数的参数(所有字符串)与定界符“ | |”连接起来。 ',但如果它们都是空字符串,则只需传递一个空字符串即可。

我有以下内容:

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

我的问题是...是否有一种更简单,更优雅的方法来执行此操作,或者我缺少JS具有执行此任务所需的一些有用功能?

4 个答案:

答案 0 :(得分:2)

您可以使用...运算符

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

答案 1 :(得分:0)

您仅可以将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('', '', ''));

答案 2 :(得分:0)

尝试这样的事情

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

答案 3 :(得分:0)

  

如果它们都是空字符串,则只需传递一个空字符串。

您可以使用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', ''))