试图简化JavaScript中的等式

时间:2016-07-12 19:08:24

标签: 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);
            }
        }
    }
};

所以,问题在于表达。这对我来说似乎很复杂。 我相信它可以简化。 所以我想我只是想知道是否有人知道如何?

2 个答案:

答案 0 :(得分:1)

该表达式简化为:

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

但原作可能会更好地传达表达的意图。

答案 1 :(得分:1)

使用基本的算术简化:

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

=

itemsOffScreen - infiniteCount * 2 + itemCount - infiniteCount - 1 

=

itemsOffScreen + itemCount - infiniteCount * 3 - 1

无论如何,你应该选择最具可读性的版本。