【问题标题】:array of variables with common properties具有共同属性的变量数组
【发布时间】:2013-12-22 00:35:58
【问题描述】:

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

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)为了更好的曝光和 2)让用户知道你正在使用什么语言
  • 您考虑过使用某种地图吗?我不熟悉 javascript,但我知道您可以像在 Java 中一样使用某种地图。
  • 我开始阅读相关内容。谢谢。我也可以在这里补充一下,我的代码中已经有 jquery,所以也许有一个使用它的简单解决方案,而且我也比纯 JS 更熟悉它。
  • 好吧,你误解了一件事:这和我做的完全一样,只是不是有多个对象的一种类型,而是有一个对象,其中数字作为变量名,类别字符串作为值。您创建的不是数组,您可以使用数组表示法 [] 访问它的事实源于 JavaScript 的工作方式,您可以使用数组表示法或点表示法访问变量。在这种情况下,点符号将不起作用,因为变量名称是数字。

标签: javascript jquery arrays properties case


【解决方案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();

这是一个仅用于返回数据的简单对象。如果您想在创建后有机会更改对象值,可以将上述更改为 setter/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" );
    }
}

【讨论】:

  • 哇。远远超过我的知识,但我认为第一部分就足够了。我正在寻找一种将类别附加到 workChart 值的简单方法。因此,当在任何功能中有 doSomethingWithWorkChart( workChart); 之类的东西时,我可以简单地添加 doAlsoSomethingWithItsCategory( workChart); 希望我自己解释一下
  • 类似:'var workCharts = [ 1,3,5:category1 , 2,4,6,10:category2 , 7,8,9:category3 ]´ 只是为了解释我的概念跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-07
相关资源
最近更新 更多