2012-11-05 18 views
1

我不知道是否可以简化,并使用较少的代码行用于此目的:方法来简化对象的数组被重复几次

我称“工人”的一类,以及类有一个方法它从一系列简单的数组中读取属性(名称,年龄等)。

直到那里,一切都很好。现在,我想添加的其中一个属性是一个布尔值,它引用了该工作人员活动的年份中的哪个月份。就目前而言,我已经解决了这样的:

var months_worker_1 = [{"jan":true},{"feb":true},{"mar":true},{"apr":false}] //and so on 

,然后我的财产读取months_worker_1,但我有一个数组一样,每个工人。我想知道是否有办法做到这一点,需要更少的代码行,例如,在一年中的所有月份创建一个“master”数组,并在每个worker的数组中,指定他们正在工作的月份。这些月份变得“真实”,剩下的几个月自动变成“假”,没有详细说明......我一直在挠头,目前只有我目前的系统工作正常,但我猜测必须有一个更简单的方法...

非常感谢!

编辑:我澄清,没有“大图片”。我只是在做一些练习,试图学习JavaScript,这一个唤醒了我的兴趣,因为我认为的解决方案似乎太复杂了(重复同一个数组多次)。没有具体的目标,我需要实现,我只是在学习如何做到这一点。

+1

有很多方法,但你必须选择最好的记住*大图*。我们还没有看到。 – Jon

+0

你说得对。我编辑了我的信息来解释我的大局。 –

回答

1

我有时使用的一个非常好的技巧是使用二进制数来跟踪固定数量的标志并将其转换为小数以便存储/ URL嵌入等。让我们假设Mark,一个用户,一年中的所有月份都是活跃的。考虑到二进制数,其中1表示“有效”和0不活跃,马克的标志是:

111111111111(12个月)

如果标志仅会在一月,二月和十二月,他的标志值被激活将是:

11000000001

察看马克在一个特定的月份是活动是检查是否对应于该月的指数在Mark的标志性格1或一样简单。

这种技术在过去帮助我通过URL发送大量标志的值,同时也保持URL合理短。当然,你可能不需要这个,但它是要知道一件很好的事:

从二进制转换为十进制很容易在JS:

parseInt(11000000001, 2).toString(10); // returns 1537 

和反向:

parseInt((1537).toString(2)); // returns 11000000001 

编辑

你可以很方便地使用数组做出来的月份数字:

var months_worker_1 = [1, 2, 3]; // this would mean that the user is active during january, february and march 
+0

这是一个非常好的主意。我将尝试使一些示例现在可以使用它... –

+0

我将与数组版本一起使用;它更清晰和更具可扩展性(例如,您可以使用它从Date对象获取信息或使用月份名称和信息索引到自定义数组中)。 – jrajav

相关问题