javascript中的数组和if语句存在问题

Having issues with an array and if statment in javascript

本文关键字:语句 存在 问题 if 数组 javascript      更新时间:2023-09-26

我正在尝试制作一个包含100个门的数组的程序。我做了一个可能不正确的数组。我希望所有100扇门都被解读为关闭。

为此,我制作了c = closedo = open。我的问题是if语句。

我希望第一个语句从第二个门开始,每2个向上,就像一样

2 4 6 8

等等。每次它到达一扇门时,它都需要打开它。然后我需要另一个if语句,用三个ie 3 6 9 12等等,

当它到达一扇门时,它需要关上打开的门,打开关闭的门。我的问题是,我如何获得if语句来查看列表中的每2个和每3个?

    <!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Locker</title>
<script>
    var lockers = [c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c,
                   c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c,
                   c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c,
                   c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c,
                   c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c];
    var c = closed
    var o = open
    function everyTwo(openlockers){
</script>
    </head>
    <body></body>
    </html>

JS Fiddle Demo

// Boolean. If true, the door is open, if false, it is closed
var o = false,
    lockers = [o, o, o, o, o, o, o, o, o, o, o, o, o, o, o, o, o, o, o, o,
               o, o, o, o, o, o, o, o, o, o, o, o, o, o, o, o, o, o, o, o,
               o, o, o, o, o, o, o, o, o, o, o, o, o, o, o, o, o, o, o, o,
               o, o, o, o, o, o, o, o, o, o, o, o, o, o, o, o, o, o, o, o,
               o, o, o, o, o, o, o, o, o, o, o, o, o, o, o, o, o, o, o, o],
    count = lockers.length;
function everyN(n){
    for(var i=n-1; i<count; i+=n){
        // reverse the state (open / closed)
        lockers[i] = !lockers[i];
    }
}

everyN(n)函数与所需数字(例如2或3)一起使用:

// custom function to display the lockers (See in JS Fiddle)
displayLockers('Initial state');
everyN(2);
displayLockers('Every Two');
everyN(2);
displayLockers('Every Two + Every Two = Initial state');
everyN(3);
displayLockers('Every Three');
everyN(2);
displayLockers('Every Three + Every Two');

一个脚本,允许您每次调用选择打开/关闭哪个储物柜。。将打开更改为关闭,反之亦然。。

<script>
    var c = "closed";
    var o = "open";
    var lockers = [c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c,
        c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c,
        c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c,
        c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c,
        c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c, c];
    function openLockers(lockerArray,interval) {
        var newArray = lockerArray;
        for (var i = 0; i <= (newArray.length - 1); i++) {
            if ((i+1) % interval === 0) {
                newArray[i] = (newArray[i] == c) ? newArray[i] = o : newArray[i] = c;
            }
        }
        return newArray;
    };
    lockers = openLockers(lockers,2);
</script>

不确定这是否是你想要的。。我推测您会希望在同一数据上多次迭代运行该函数。

首先,您应该知道必须定义一个变量,然后才能在数组中使用它,因此lockers数组中的c将包含一组undefined值。以下是您可能正在寻找的内容。

function openLockers(lockerCount, start, every){
  var l = lockerCount, a = [];
  for(var i=0; i<l; i++){
    a[i] = false;
  }
  for(var i=start; i<l; i+=every){
    a[i] = true;
  }
  return a;
}
// 100 lockers open every 2 starting at Array element 1, which is the second Array element
var lockers = openLockers(100, 1, 2);

lockers阵列中的true值表示打开的储物柜,而false值表示关闭的储物柜。请注意,start是一个数组编号。