2017-06-08 77 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("&"); 
}