JavaScript 高级循环

标签 javascript arrays

var arr = [
    [ 1234, 3456 ],
    [ 1324, 2345 ],
    [ 6355 ],
    [ 2234 ],
    [ 8345 ],
    [ 1234, 6355 ]
];
var i = arr.length;

while(i--){
    var current = arr[i];
    if(i == 0){
        break;
    }
    var before = arr[i-1];

    if(!before[1]) continue;

    var result = current[1] - before[1]
    console.log(result)
}

在上面的代码中,仅在 0 索引中具有值的子数组将被消除,因为 if(!before[1]) continue;。如果运行此代码,结果为 NaN 然后是 -1111,其中 NaN 是因为 arr[2][1]未定义之前2345-1111 是因为 arr[1][1]2345arr[0][1]3456 所以从当前之前减去之前得到 -1111

正如您所看到的,arr 的最后一个索引中的数组被绕过,而它的第一个索引 [1234, 6355] 中具有值。但在这种情况下,current 可能首先等于 arr[5][1],然后等于 arr[1][1] > 首先。我想要完全相同的事情,当数组在索引零中没有任何值时,仅对于 before 变量,而 current 保留该值,直到找到之前。 在此示例中不久,结果应该是:

6355 - 2345 = 4010//arr[5][1] - arr[1][1]

2345 - 3456 = -1111//arr[1][1] - arr[0][1]

但目前只是

NaN//arr[2][1] - arr[1][1] -1111/arr[1][1] - arr[0][1]

当未找到 before 时,不应消除任何 current;当未找到 current 时,不应消除任何 before

最佳答案

如果我正确理解了您的问题,您将尝试对每个连续的 arr[n][1] 进行递减,排除那些 arr[n] ,只有一名成员。

你可以这样做:

var arr = [
        [1234, 3456],
        [1324, 2345],
        [6355],
        [2234],
        [8345],
        [1234, 6355]
    ],
    i = arr.length,
    result, firstOperand;

while (i--) {
    if (typeof firstOperand === 'undefined') { // No first operand 
        firstOperand = arr[i][1]; // Set the first operand
        continue;
    }
    if (arr[i].length < 2) {continue;} // No second operand, continue   
    result = firstOperand - arr[i][1];
    firstOperand = arr[i][1]; // Set a new first operand
    console.log(result);
}

A live demo at jsFiddle

诀窍是,将第一个操作数存储到变量中。然后检查它是否有值。如果不是,则分配 1 并继续循环。然后检查第二个操作数是否在当前索引处进行递减。如果没有找到,则继续循环。然后,当您拥有两个操作数时,进行数学计算,并分配一个新的 firstOperand

请注意,typeof 检查还允许您使用零作为值。当 arr 中最后一些成员的长度为 1,或者甚至根本没有有效成员时,该代码也可以工作。

关于JavaScript 高级循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33943080/

相关文章:

arrays - 如何将两个数组与拼接结合起来

php - 无法在函数 PHP 中获取数组

c++ - 如何在特定位置使用 switch 或 if-else 步骤将十六进制值分配给数组?

javascript - 如何在javascript中清除数组?

php - 按计算列循环时对数据排序

javascript - 如何防止图像离开html中的区域

javascript - 浏览器抗锯齿(平滑线条)

c++ - 下一个排列定义

javascript - 拖入相对定位的可排序列表时,jQuery 可拖动助手位置问题

javascript - 混淆 error 和 reject in Promise