简体   繁体   English

JavaScript中的if-else条件更加动态

[英]If-else condition in JavaScript more dynamic

I have a JavaScript code which has many if-else conditions for different brands wrt html 我有一个JavaScript代码,其中包含针对不同品牌的许多if-else条件wrt html

function get_brand_label(b) {
    var brand1label = '<div class="brand1_label">B1</div>';
    var brand2label = '<div class="brand2_label">B2</div>';
    var brand3label = '<div class="brand3_label">B3</div>';
    var brand4label = '<div class="brand4_label">B4</div>';

    if (b == 'Brand1') {
        return brand1label;
    } else if (b == 'Brand2') {
        return brand2label;
    } else if (b == 'Brand3') {
        return brand3label;
    } else if (b == 'Brand4') {
        return brand4label;
    }
}

I am using this get_brand_label function in another function as: 我在另一个函数中将此get_brand_label函数用作:

var label = get_brand_label(d.brand);

In future, if I want to add B5 and B6, I need to add new if-else conditions 将来,如果要添加B5和B6,则需要添加新的if-else条件

So before adding new brands, is there any way to make the above existing code more dynamic so that I don't need to add if-else conditions in future while adding new brands 因此,在添加新品牌之前,有什么方法可以使上述现有代码更具动态性,以便将来在添加新品牌时无需添加if-else条件

You can just make a map of labels and brands and then return the label based on the brand: 您可以制作标签和品牌的地图,然后根据品牌返回标签:

const brandLabelMap = {
  Brand1: '<div class="brand1_label">B1</div>',
  Brand2: '<div class="brand2_label">B2</div>',
  Brand3: '<div class="brand3_label">B3</div>',
  Brand4: '<div class="brand4_label">B4</div>'
};

function get_brand_label(b) {
  return brandLabelMap[b];
}

Try this one 试试这个

    const yourFunction = (label) => {
      return label + "label";
    }
    yourFunction(label);

you don't even need if\\else you can return label + your brand. 您甚至不需要\\可以返回标签+您的品牌。

You can use an object instead, add the extra key/value pairs when you want to extend it 您可以改用一个object ,当您想扩展它时添加额外的键/值对

 function get_brand_label(b) { let mapping = { 'Brand1': '<div class="brand1_label">B1</div>', 'Brand2': '<div class="brand1_label">B2</div>', 'Brand3': '<div class="brand1_label">B3</div>', 'Brand4': '<div class="brand1_label">B4</div>', } return mapping[b] } console.log(get_brand_label('Brand2')) 

Like others have suggested, use an object to map key-value-pairs and construct your HTML from it, like so: 就像其他人建议的那样,使用一个对象来映射键值对并从中构造HTML,如下所示:

 function get_brand_label(b) { const brandlabels = { "Brand1" : "B1", "Brand2" : "B2", "Brand3" : "B3", "Brand4" : "B4", }; return `<div class="${b.toLowerCase()}_label">${brandlabels[b]}</div>`; } console.log(get_brand_label("Brand1")); 


${b.toLowerCase()}_label will automatically create lower-case classnames. ${b.toLowerCase()}_label将自动创建小写的类名。 However if your brands contain spaces or other characters that are not valid for css you need to take care of that, too. 但是,如果您的品牌包含对CSS无效的空格或其他字符,则也需要注意这一点。

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

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