循环一些硬编码数据

时间:2014-10-23 12:47:05

标签: javascript for-loop

在一些地方,我有一组预先定义的值。

我目前的代码是:

for (var period in {'today':true,'yesterday':true,'this week':true,'last week':true,'this month':true,'last month':true}) {
  ...    
}

它有效,但有更好的方法吗?

period需要是,而不是索引,否则我会使用数组。)

3 个答案:

答案 0 :(得分:2)

是的,假设您不必担心旧的Javascript引擎(如IE< = 8):

['today','yesterday','this week','last week',
 'this month','last month'].forEach(function(period) {
 ...
})

答案 1 :(得分:1)

在ES6中这样做的一种方法是:

for (var period of ['today', 'yesterday', 'this week', 'last week', 'this month', 'last month']) {
    // ...        
}

这在firefox中受支持。如果你的引擎不支持它,那么使用ES6转换器,否则你需要回退到旧的解决方案。

答案 2 :(得分:1)

我会这样做:

var timePeriod = [ "today"
                 , "yesterday"
                 , "this week"
                 , "last week"
                 , "this month"
                 , "last month"
                 ];

for (var i in timePeriod) {
    with ({ period: timePeriod[i] }) {
        ...
    }
}

与@ MarkReed的解决方案相比,这有两个优点:

  1. 适用于所有浏览器。
  2. 它更快,因为从未调用任何函数。
  3. 此外,使用with语句可以防止臭名昭着的循环clousure问题。