更紧凑的方式来做到这一点?

Mac*_*cha 1 javascript arrays loops

我有几个循环细胞周围细胞的功能.网格包含在数组中.

在我的代码中,我检查以确保它不是边缘单元之一,因为检查未定义的单元格会导致错误.

因此,我有这样的代码:

if(x > 0) {
    var firstX = x - 1;
} else {
    var firstX = x;
}
if(x < 199) {
    var lastX = x + 1;
} else {
    var lastX = x;
}

if(y > 0) {
    var firstY = y - 1;
} else {
    var firstY = y;
}
if(y < 199) {
    var lastY = y + 1;
} else {
    var lastY = y;
}
Run Code Online (Sandbox Code Playgroud)

很多代码行做的很少.有没有更优雅的方式来做到这一点?

fma*_*ark 11

或者更清楚:

var firstX = Math.max(x - 1, 0);
var lastX = Math.min(x + 1, 199);
var firstY = Math.max(y - 1, 0);
var lastY = Math.min(y + 1, 199);
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 9

您可以使用条件运算符:

var firstX = x > 0 ? x - 1 : x;
var lastX = x < 199 ? x + 1 : x;
var firstY = y > 0 ? y - 1 : y;
var lastY = y < 199 ? y + 1 : y;
Run Code Online (Sandbox Code Playgroud)

可以通过写一个函数去除冗余来计算给定值的"第一",以及类似的"最后" - 但我认为在这种情况下这将是过度的.