我想将传递给我的函数的参数(所有字符串)与定界符“ | |”连接起来。 ',但如果它们都是空字符串,则只需传递一个空字符串即可。
我有以下内容:
constructString(one: string, two: string, three: string) {
if (one === '' && two === '' && three === '') {
return '';
}
return [one, two, three].filter(Boolean).join('|')
}
我的问题是...是否有一种更简单,更优雅的方法来执行此操作,或者我缺少JS具有执行此任务所需的一些有用功能?
答案 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', ''))