1

我想知道我是否可以为此目的简化和使用更少的代码行:

我有一个名为“worker”的类,该类有一个从一系列简单数组中读取属性(姓名、年龄等)的方法。

直到那里,一切都很好。现在,我要添加的属性之一是一个布尔值,它引用了工作人员在一年中的哪些月份处于活动状态。目前,我已经这样解决了:

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

然后,我的属性为months_worker_1,但我为每个工人都有一个这样的数组。我想知道是否有一种方法需要更少的代码行,例如,创建一个包含一年中所有月份的“主”数组,并在每个工人的数组中,只指定他们工作的月份. 那些月份变成“真”,其余月份自动变成“假”,没有指定所以......我一直在摸不着头脑,目前只有我当前的系统工作正常,但我猜必须有一个更简单的方法......

非常感谢!

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

4

1 回答 1

1

我有时使用的一个非常好的技巧是使用二进制数来跟踪固定数量的标志,并将其转换为十进制以便于存储/ URL 嵌入等。假设用户 Mark 整个月都处于活动状态年。考虑一个二进制数,这1意味着“活动”和0非活动,马克的标志将是:

111111111111(十二个月)

如果 Mark 仅在 1 月、2 月和 12 月期间处于活动状态,则他的标志值将是:

11000000001

检查 Mark 在特定月份是否处于活动状态就像检查 Mark 标志中与该月索引对应的字符是否为1或一样简单0

过去,这种技术帮助我通过 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
于 2012-11-05T12:37:28.097 回答