gpt4 book ai didi

JavaScript 高级循环

转载 作者:行者123 更新时间:2023-12-03 08:15:46 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com