具有公共属性的变量数组

时间:2013-12-05 07:16:21

标签: javascript jquery arrays properties case

我创建了一种基于名为workChart的变量的滑块,其中包含1到15之间的值(可能更多)。现在这些元素(作品)也分为3类。 我还定义了全局列表,其中包含每个类别的作品名称:

gtitlesCol = [12,7,6,3,2,1];
gtitlesRech = [13,5,4];
gtitlesCorp = [15,14];

现在我希望整个网站上的每个价值(工作)都会被记录下来,以便成为其类别的一部分,以便我能够避免这样的事情:

switch( workChart ) {
    case 3:  switchCategory( "Recherche");   break;
    case 5:  switchCategory( "Collection" ); break;
    case 12: switchCategory( "Recherche");   break;
    case 13: switchCategory( "Corporate" );
};

是否有一种聪明的方法可以将类别“嵌套”到workChart值中?因此,我可以使用变量workChart,并且不再需要每次告诉函数它属于哪个类别。我认为它与创建具有属性(类别f.e.)的对象(作品)有关,但我不知道如何处理它。有帮助吗?非常感谢!

@Tobias

对不起托比亚斯,我想我的问题比你想象的还要简单,我糟糕的解释让你浪费时间。对不起。我成功地做了我想要的事情:

var categories = { 1:"Collection", 2:"Collection", 3:"Collection", 4:"Recherche", 5:"Recherche", 6:"Collection", 7:"Collection", 8:"Collection", 9:"Collection", 10:"Collection", 11:"Collection", 12:"Collection", 13:"Recherche", 14:"Corporate", 14:"Corporate" }

然后我可以做(f.e。)

alert( categories[5] );

或用它做其他事情。我认为现在唯一缺少的是我的数组更合适的语法形式,以便不重复15次而不是重复3次。

1 个答案:

答案 0 :(得分:1)

是的,你假设正确,你可以创建WorkChart作为对象。下面是一个示例实现,假设您可能希望使用此类别和值执行某些操作(以任何方式处理),然后准备好返回:

function WorkChart(cat,objVal) {
    var category = cat,
        retValue = objVal,

        getCategory = function() {
            // any code handling category
            return category;
        },

        retValue = function() {
            // any code handling value
            return retValue;
        };

        return {
            category: getCategory,
            value: retValue
        }
};


var wrkCh1 = new WorkChart("Recherche",13);
var category = wrkCh1.category();
var value = wrkCh1.value();

这是一个简单的对象,仅用于返回数据。如果您希望在创建后有机会更改对象值,可以将上面的内容更改为setters / getters版本,如:

function WorkChart(cat,objVal) {
    var category = cat,
        retValue = objVal,

        getCategory = function() {
            return category;
        },

        getValue = function() {
            return retValue;
        },

        changeCategory = function(newCat) {
            // any code handling category
            category = newCat;
        },

        changeValue = function(newVal) {
            // any code handling value
            retValue = newVal;
        };

        return {
            category: getCategory,
            value: getValue,
            setCategory: changeCategory,
            setValue: changeValue
        }
};

var workCh1 = new WorkChart("Recherche",13);
var category = workCh1.category();
var value = workCh1.value();

workCh1.setCategory("Corporate");
workCh1.setValue(15);

category = workCh1.category();
value = workCh1.value();

关于你的评论,有许多方法可以创建一个对象数组,然后将其中一个传递给函数,例如。

var workCharts = new Array();
workCharts.push(new WorkChart("category1",1));
workCharts.push(new WorkChart("category1",3));
workCharts.push(new WorkChart("category1",5));
workCharts.push(new WorkChart("category2",2));
workCharts.push(new WorkChart("category2",4));

//... and so on until you add them all
// now let's take any element
var workChart = workCharts[1];

doSomethingWithWorkChart( workChart);
doSomethingWithWorkChartCategory (workChart);

好的,看到你的编辑后,我可以告诉你,你可以通过一个开关功能实现这一点,并保留你的3个阵列gtitlesCol,gtitlesRech,gtitlesCorp。

function switchCatgegoryByNumber (workChart) {
    if(gtitlesCol.indexOf(workChart != -1) {
       switchCategory( "Collection" );
    }
    else if (gtitlesRech.indexOf(workChart != -1) {
       switchCategory( "Recherche" );
    }
    else if (gtitlesCorp.indexOf(workChart != -1) {
       switchCategory( "Corporate" );
    }
}