2017-06-08 54 views
0

如果它们对链接不为空,我想追加这些值。它不允许if在字符串中,所以我应该怎么做呢?如果不为空,则追加到url

var age = $('#age').val(); 
    var fn = $('#fn').val(); 
    var ln = $('#ln').val(); 
    var city = $('#city').val(); 
    var country = $('#country').val(); 

    var link = "https://mysre.com/articles/index.php?title=man-sets-biggest-pizza-record" if(age !=null){ "&age=" + age + } "&fn=" + fn + "&ln=" + ln + "&city=" + city + "&country=" + country; 

回答

1

缺乏的领域本身,我不知道这会不会做你想要什么。

var myFields = { 
 
    age: $("#age").val, 
 
    fn : $("#fn").val, 
 
    ln : $("#ln").val, 
 
    city: $("#city").val(), 
 
    country: $("#country").val() 
 
    } 
 

 
    var link = "https://mysre.com/articles/index.php?title=man-sets-biggest-pizza-record"; 
 
    
 
    $.each(myFields, function(key, value){ 
 
     if(value){ 
 
     link += "&"+key+"="+value; 
 
     } 
 
    }

+0

谢谢你的回答。我已经用这个选项去了 – quizzaman

+0

很酷。很高兴它解决了。 – Snowmonkey

0

使用ternary operator,它是那样简单(expression ? value if true : value if false)

不要忘了JavaScript的truthyness,让您表达的小!

您还可以利用与truthy值一招,用var || default,其中,如果var是falsy,default将使用(这可以链接到使用一堆瓦尔的,如果你想)

执行空COALESCE
0

一种选择是使用三元if

var age = $('#age').val(); 
 
var fn = $('#fn').val(); 
 
var ln = $('#ln').val(); 
 
var city = $('#city').val(); 
 
var country = $('#country').val(); 
 

 
var link = "https://mysre.com/articles/index.php?title=man-sets-biggest-penis-record" + (age != undefined ? "&age=" + age : '') + (fn != undefined ? "&fn=" + fn : '') + (ln != undefined ? "&ln=" + ln : '') + (city != undefined ? "&city=" + city : '') + (country != undefined ? "&country=" + country : ''); 
 

 
console.log(link);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

看起来不错,我不想通过&age = through,如果它不存在虽然 – quizzaman

+0

如果undefined没有通过。虽然有比我更好的解决方案。 – doutriforce

1

有许多方法来解决这个问题。

最明显的是只是建立你的链接一块一块。

var a = 1; 
var b = null; 
var c = 5; 

var str = ''; 
if (a) { 
    str += a + '&'; 
} 

if (b) { 
    str += b + '&'; 
} 

// ... and so on 

我更喜欢的一个更清洁的解决方案是将所有东西都放到数组或对象中,然后从中构建您的字符串。

var data = { 
    a: 1, 
    b: null, 
    c: 5 
}; 

var str = 'http://myarray.com/?' + 
    Object.keys(data) 
    .filter(function (key) { return data[key] }) 
    .map(function (key) { return key + '=' + data[key] }).join('&'); 

Object.keys(data)会给你喜欢['a', 'b', 'c']一个阵列(从对象的按键)。

filter()将从任何返回真值的值开始构建新数组。在这种情况下,生成的数组将为['a', 'c']'b'被删除,因为它的值为空,这是一个错误的值)。

map()将循环遍历每一个,然后从每个调用的返回值构建一个新数组。这看起来像这样:['a=1', 'c=5']

最后,join('&')会将数组中的所有值合并为一个字符串:a=1&c=5,我们可以将其添加到字符串的其余部分。

另一种选择是在字符串(a ? a : '')中使用三元运算符,但是这种方法不能很好地扩展到很多值。

+0

不错的解决方案,老兄! – doutriforce

0

我会把你所有的潜在值放到一个对象中,如果对象值存在并且是有效的,将querystring部分的对象迭代到一个数组中,然后将这些部分连接到一个真正的查询字符串中,然后你可以附加到你的url :

var obj = { 
    "age": $('#age').val(), 
    "fn": $('#fn').val(), 
    "ln": $('#ln').val(), 
    "city": $('#city').val(), 
    "country": $('#country').val() 
}; 

var arr = []; 
for (var k in obj) { 
    if (obj[k] || obj[k] === 0) 
    arr.push(k + "=" + encodeURIComponent(obj[k])); 
} 

var url = "https://penisurl"; 

if (arr.length) { 
    url += "?" + arr.join("&"); 
}