繁体   English   中英

如何根据变量的值为url设置正确的条件? (JavaScript的)

[英]How do I make the right conditions for the url based on the value of a variable? (javascript)

我的脚本javascript是这样的:

<script>

    var url = 'http://my-app.test/item';
    var sessionBrand = 'honda';
    var sessionModel = 'jazz';
    var sessionCategory = 'velg';
    var sessionKeyword = 'RS 175/60 R 15';

    if(sessionBrand)
        var brand = '?brand='+sessionBrand;
    else
        var brand = '';

    if(sessionModel)
        var model = '&model='+sessionModel;
    else
        var model = '';

    if(sessionCategory)
        var category = '&category='+sessionCategory;
    else
        var category = '';

    if(sessionKeyword)
        var keyword = '&keyword='+this.sessionKeyword;
    else
        var keyword = '';

    var newUrl = url+brand+model+category+keyword;
    console.log(newUrl);

</script>

console.log的结果如下:

http://my-app.test/item?brand=honda&model=jazz&category=velg&keyword=RS 175/60 R 15

var sessionBrand,sessionModel,sessionCategory和sessionKeyword是动态的。 它可以改变。 它可以为null或可以具有值

我有个问题

例如这样的情况:

    var sessionBrand = '';
    var sessionModel = '';
    var sessionCategory = '';
    var sessionKeyword = 'RS 175/60 R 15';

网址是这样的:

http://my-app.test/item&keyword=RS 175/60 R 15

网址应该像这样:

http://my-app.test/item?keyword=RS 175/60 R 15

我还是很困惑

我怎么解决这个问题?

只需将数组用于参数,然后将它们与&分隔符结合在一起即可。 例如:

var url = 'http://my-app.test/item';
var sessionBrand = 'honda';
var sessionModel = 'jazz';
var sessionCategory = 'velg';
var sessionKeyword = 'RS 175/60 R 15';

var params = [];

if (sessionBrand) {
    params.push('brand=' + sessionBrand);
}

if (sessionModel) {
    params.push('model=' + sessionModel);
}

if(sessionCategory) {
    params.push('category=' + sessionCategory);
}

if(sessionKeyword) {
    params.push('category=' + sessionCategory);
}
var newUrl = url + '?' + params.join('&');
console.log(newUrl);

您的代码的问题在于,除了sessionBrand之外,所有查询参数都以& sessionBrand URL中需要的是第一个参数以?开头? 以及所有其他带有& 如您所见,当没有sessionBrand时,您的代码不会执行此sessionBrand

有很多方法可以解决此问题。 我可能想到的最整洁的方法是,按原样组装各个部分,但没有任何前缀-然后将它们全部结合在一起。 像这样(我刚刚看过Viktor的解决方案,这是完全相同的想法,但是更整洁,因为他重写了更多的先前代码):

if(sessionBrand)
    var brand = 'brand='+sessionBrand;
else
    var brand = '';

if(sessionModel)
    var model = 'model='+sessionModel;
else
    var model = '';

if(sessionCategory)
    var category = 'category='+sessionCategory;
else
    var category = '';

if(sessionKeyword)
    var keyword = 'keyword='+this.sessionKeyword;
else
    var keyword = '';

var queryString = '?' + [sessionBrand, sessionModel, sessionCategory, sessionKeyword].filter(function(str) {
    return str.length > 0;
}).join("&");

var newUrl = url+queryString;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM