2017-06-08 8 views
0

値がリンクにnullでない場合は、値を追加したいと考えています。それは文字列のifを許さないので、代わりに何をするべきですか?Javascript nullでない場合は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忘れてはいけないくらい簡単です!あなたもnullを実行するためにtruthy値でトリックを利用することができ

varがfalsyであれば、defaultが使用される場所、var || default合体(これは、あなたがしたい場合VARSの束を使用するように連鎖させることができます)

0

1つのオプションは、ターナーリ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

がよさそうだ、私は 'undefined'場合には渡していない – quizzaman

+0

けれども、それが存在しない場合&年齢=通過する必要はありません。しかし、私よりも良い解決策があります。 – doutriforce

1

これを解決するにはいくつかの方法があります。

最も明白なのは、リンクを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'は値がnullなので削除されました。これは偽の値です)。

map()各ループをループし、各呼び出しの戻り値から新しい配列を作成します。これは次のようになります:['a=1', 'c=5']

最後に、join('&')は配列内のすべての値を1つの文字列:a=1&c=5に結合します。この文字列は残りの文字列に追加できます。

もう1つのオプションは、文字列(a ? a : '')に3進演算子を使用することですが、これは多くの値でうまく調整できません。

+0

ニースのソリューション、おい! – doutriforce

0

私はすべての潜在的な値をオブジェクトに入れ、オブジェクト値が存在し、有効であればクエリ文字列部分を配列にプッシュし、次にその部分を実際のクエリー文字列に結合して、 :

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("&"); 
} 
関連する問題