范围内的加法和减法

时间:2011-02-17 21:49:38

标签: javascript

您将如何在JavaScript中编写以下内容:

    Row-=21;
    if (Row < 1) {
        Row = 1;
    }

4 个答案:

答案 0 :(得分:6)

你可以这样做:

Row = Math.max( Row-21, 1);

修改

如果您希望能够设置最小和/或最大范围,可以将自己的函数原型化为数字。

Number.prototype.adjust = function( adj, min, max ) {
    if( isNaN( min ) ) min = -Infinity;
    if( isNaN( max ) ) max = Infinity;
    var res = this + ~~adj;
    return res < min ? min : res > max ? max : res;
};

然后你可以像这样使用它:

Row = Row.adjust( -21, 1, 50 ); /* adjustment, min, max */
  • 第一个参数是调整
  • 第二个参数是最小范围(传递null表示无分钟)
  • 第三个参数是最大范围(传递null或留空无最大值)

答案 1 :(得分:2)

Row = Row > 22 ? Row - 21 : 1;

答案 2 :(得分:0)

row-=21;
if (row < 1) {
    row = 1;
}

这似乎已经是有效的JS。

唯一的区别是你需要将你的“行”变量声明为:

var row = 0;

答案 3 :(得分:0)

只是为了好玩,这里有一种用操作替换操作符角色的方法:

function makeBoundedOp( bound, addOrSub ){
  var newfunc = function newfunc(value,change){
    if( addOrSub === 'add' ){
       var upperbound = bound; 
       return (value+change > upperbound) ? upperbound : value+change; 
    } else {
       var lowerbound = bound;
       return (value-change < lowerbound) ? lowerbound : value-change;               
    }
  }  
  return newfunc;
}

现在建立你需要的任何特殊用途的有界算子函数:

var subtractBoundedOne = makeBoundedOp(1,'subtract');
var subtractBoundedTen = makeBoundedOp(10,'subtract');
var addBoundedFifty = makeBoundedOp(50,'add');

然后:

var row = 20;

subtractBoundedOne(row,12); // 8
subtractBoundedTen(row,12); // 10
addBoundedFifty(row,37); // 50