0

JavaScript を使用して配列ローダーを作成しました。

ここでjsfiddle

最後に直接クリックすると、未定義になります。私はこのようなものでそれをキャッチしようとしました

var lastWord = (function() {

            return function() {
            var resultWord = wordArray[--count % wordArray.length];
                if (typeof resultWord == "undefined")
                { 
                return false;
                }
                else 
                {
                return wordArray[--count % wordArray.length];
                }
            }
        }

}());

しかし、うまくいきませんでした。何か提案はありますか?

4

2 に答える 2

0

http://jsfiddle.net/ayQH2/2/をお試しください

問題は、剰余演算子によって返される符号がその最初のオペランドの符号であるということです。だから、例えば

(-17) % 12 // == -5 , not 7

これはおそらく機能し、追加の関数ラッパーは含まれていません。

var nextWord = function() {
    // silly work-around for negative modulus issue
    var index = (++count % wordArray.length) + wordArray.length
    return wordArray[index % wordArray.length];
};
var lastWord = function() {
    // silly work-around for negative modulus issue
    var index = (--count % wordArray.length) + wordArray.length
    return wordArray[index % wordArray.length];
};

これに対処する方法は他にもたくさんあります。おそらく、より良い方法countは、適切な範囲から決して逃げないようにすることです。

count = (count == wordArray.length - 1) ? 0 : count++; // increment
count = (count == 0) ? wordArray.length - 1 : count--; // decrement
于 2012-12-04T21:27:45.873 に答える
0

初めて未定義になるのは、wordArrayに負の数がないためです。更新を押す前に「最後の」単語はありません。それは理にかなっていますか?一度更新を押すと正常に動作します。

于 2012-12-04T20:51:38.143 に答える