尝试简化 JavaScript 中的方程式

Trying to simplify an equation in JavaScript

本文关键字:方程式 JavaScript      更新时间:2023-09-26

我现在正在研究一个方程,我的大脑在捉弄我。我有几个变量:

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);
            }
        }
    }
};

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

使用基本的算术简化:

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

=

itemsOffScreen - infiniteCount * 2 + itemCount - infiniteCount - 1 

=

itemsOffScreen + itemCount - infiniteCount * 3 - 1

无论如何,您都应该使用最具可读性的版本。

该表达式简化为:

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

但原文可能更好地传达了表达的意图。