我有一个带有4个参数的函数来构建json请求。我需要检查'undefined'/空值
的参数function funName(param1, param2, param3, param4) {
if (param1 !== '' && param2 !== '' && param3 !== '' && param4 !== '') {
url = https://example.com/api/posts.json?' + param1 + param2 + param3 + param4;
}
else if {
if (param1 == '' && param2 !== '' && param3 !== '' && param4 !== '') {
url = https://example.com/api/posts.json?' + param2 + param3 + param4;
}
// code
};
如何检查更优雅?
答案 0 :(得分:1)
我建议迭代arguments
对象来执行此操作:
funName(param1, param1, param1, param1) {
url = 'https://example.com/api/posts.json?';
var i;
for (i=0; i<arguments.length; i++) {
if (arguments[i] && arguments[i] !== '') {
url += arguments[i];
}
}
// code
}
此代码将使用不确定数量的参数。如果您对传入的参数数量有信心,可以省略arguments
位,而只是创建所有参数的数组,并迭代该数组。
请注意,除非您将完全形成的查询参数作为参数传递 - 完成分隔符 - 这可能实际上不是开箱即用的。我不确定实际传递的参数是什么样的,所以我无法肯定地说。
答案 1 :(得分:0)
出于您的目的,您可以这样做:
function funName(param1, param2, param3, param4) {
var url = 'https://example.com/api/posts.json?' +
(param1 || '') + (param2 || '') + (param3 || '') + (param4 || '');
// rest of your code.
}
或者使用ES6:
function funName(/* params */) {
var url = 'https://example.com/api/posts.json?' +
[...arguments].filter(p => p).join('');
// rest of your code.
console.log(url);
}
funName('a=1', '&b=2', '');
&#13;
答案 2 :(得分:0)
如果函数有值,你可以使用Array.prototype.forEach添加函数的每个参数...而且,每个正式参数(param1,param1等)都具有相同的名称......它们应该是唯一的!
function funName(param1, param2, param3, param4) {
var url = 'https://example.com/api/posts.json?';
Array.prototype.forEach.call(arguments,function(argumentItem) {
if (argumentItem) {
url += argumentItem;
}
});
return url;
}
console.log(funName('', 'a', 'n', 'c'));
&#13;