我想知道我是否可以为此目的简化和使用更少的代码行:
我有一个名为" worker"的类,该类有一个从一系列简单数组中读取属性(名称,年龄等)的方法。
直到那里,一切都很好。现在,我要添加的一个属性是一个布尔值,它引用了一年中工作人员处于活动状态的几个月。目前,我已经解决了这个问题:
var months_worker_1 = [{"jan":true},{"feb":true},{"mar":true},{"apr":false}] //and so on
然后,我的属性读取months_worker_1
,但每个工作者都有一个这样的数组。我想知道是否有办法做到这一点需要更少的代码行,例如,创建一个" master"一年中所有月份的数组,并在每个工作人员的数组中,指定他们正在工作的月份。这几个月变成了#14;真实的",其余几个月变成"假"自动没有说明......我一直在摸不着头脑,目前只有我现在的系统工作正常,但我猜测必须有一个更简单的方法...
非常感谢!
编辑:我澄清,没有"大图片"。我正在做一些练习,试图学习javascript,这个唤醒了我的兴趣,因为我认为解决方案看起来太复杂了(多次重复相同的数组)。没有具体的目标我需要实现,我只是在学习如何做到这一点。
答案 0 :(得分:1)
我有时使用的一个非常好的技巧是使用二进制数来跟踪固定数量的标志,并将其转换为十进制以便于存储/ URL嵌入/等。让我们假设用户Mark是在一年中的所有月份活跃。考虑二进制数,其中1
表示“有效”且0
无效,Mark的标志将是:
111111111111
(十二个月)
如果马克只在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