2016-07-12 62 views
0

我正在研究一個方程式,而我的大腦正在玩弄技巧。 我有幾個變量:試圖簡化JavaScript中的公式

var infiniteCount, 
    itemIndex, 
    itemCount = 6, 
    itemsToShow = 3, 
    itemsOffScreen = itemsToShow * 3; 

這只是一個例子。 我想出了一個方程來計算項目索引後,我預先項目,而反向循環的項目(我希望是有道理的)。 我想出的等式是:

itemIndex = (itemsOffscreen - (infiniteCount * 2)) + ((itemCount - infiniteCount) - 1); 

它的工作原理。如果我將itemsToShow更改爲6,則索引仍然正確。 在行動中看到的代碼,它看起來像這樣:

// Set up infinite 
var _setupInfinite = function (items, options) { 

    // Are we infinite 
    var i, 
     infiniteCount, 
     itemIndex, 
     itemCount = items.length, 
     itemsToShow = options.display.itemsToShow || itemCount, 
     itemsOffscreen = itemsToShow * 3, 
     isEven = items.length % 2 == 0; 

    // If we are scrollable 
    if (options.scrollable && options.infinite) { 

     // If we need to duplicate some items 
     if (itemsOffscreen > itemCount) { 

      // Set our counter to the amount we need to duplicate 
      infiniteCount = itemsToShow; 

      // Get our index (it won't change as we are always adding to the beginning of the array) 
      itemIndex = (itemsOffscreen - (infiniteCount * 2)) + ((itemCount - infiniteCount) - 1); 

      // Add items to the beginning of our array 
      for (i = itemsOffscreen; i > (itemsOffscreen - infiniteCount) ; i--) { 

       // Copy our item 
       var item = angular.copy(items[itemIndex]); 
       item.active = false; 

       // Add to the beginning of the array 
       items.unshift(item); 
      } 

      // Add items to the end of our array 
      for (i = 0; i < infiniteCount; i++) { 

       // Get our index 
       itemIndex = i + infiniteCount; 

       // Copy our item 
       var item = angular.copy(items[itemIndex]); 
       item.active = false; 

       // Add to the end of the array 
       items.push(item); 
      } 
     } 
    } 
}; 

所以,問題在於表達。對我來說這似乎太複雜了。 我相信它可以被簡化。 所以我想我只是想知道如果有人知道如何?

+0

您的圓括號都不需要。 –

回答

1

使用基本的算術簡化:

(itemsOffscreen - (infiniteCount * 2)) + ((itemCount - infiniteCount) - 1) 

=

itemsOffScreen - infiniteCount * 2 + itemCount - infiniteCount - 1 

=

itemsOffScreen + itemCount - infiniteCount * 3 - 1 

無論在什麼情況下,你應該是最易讀的版本去。

1

該表達式簡化爲:

itemIndex = itemsOffscreen + itemCount - 3*infiniteCount - 1; 

但原可更好地傳達表達的意圖。