Выдать в течение цикла, который выполняется один раз в JavaScript

У меня есть этот код, результаты которого должны быть [0,1,2,3,0,3], но я получаю только [0,1,2,3] в качестве вывода, поскольку цикл будет происходить только один раз.

frequ=[[1],[3]]
ppcm=3
den=1
frd1=[[1],[3]]
offset=[ [ 0 ], [ 0 ] ]

for (i = 0; i < frequ.length-1; i++) {

      var matind1 = offset[i] * den;
      var matind2 = frd1[i][0];
      var matind3 = parseFloat(ppcm);
      var mat1 = matindices(offset[i] * den, frd1[i][0], parseFloat(ppcm));
}

    console.log(mat1);

    function matindices(from, diff, to) {
      //fucntion which implements range list of scilab like matindices[1:2:10] gives 1.    3.    5.    7.    9.
      //which was not possible in js so made function
      var arrayind = [];
      for (i = 0; i <= to; i++) {
        arrayind.push(i);
        i = i + diff - 1;
        if (i >= to) {
          return arrayind;
        }
      }


}

2 ответа

Ваша переменная i не определена из-за этой и другой функции, также использующей ту же самую переменную. Попробуй с этим,

frequ=[[1],[3]]
ppcm=3
den=1
frd1=[[1],[3]]
offset=[ [ 0 ], [ 0 ] ]

for (var j = 0; j < frequ.length; j++) {

      var matind1 = offset[j] * den;
      var matind2 = frd1[j][0];
      var matind3 = parseFloat(ppcm);
      var mat1 = matindices(offset[j] * den, frd1[j][0], parseFloat(ppcm));
  console.log(mat1);
}

    console.log(mat1);

    function matindices(from, diff, to) {
      //fucntion which implements range list of scilab like matindices[1:2:10] gives 1.    3.    5.    7.    9.
      //which was not possible in js so made function
      var arrayind = [];
      for (var i = 0; i <= to; i++) {
        arrayind.push(i);
        i = i + diff - 1;
        if (i >= to) {
          return arrayind;
        }
      }
}

Это будет выводить,

[0, 1, 2, 3]
[0, 3]

Этот код выполняет ваши требования,

frequ=[[1],[3]]
ppcm=3
den=1
frd1=[[1],[3]]
offset=[ [ 0 ], [ 0 ] ]

var mat1 = [];
for (var j = 0; j < frequ.length; j++) {

      var matind1 = offset[j] * den;
      var matind2 = frd1[j][0];
      var matind3 = parseFloat(ppcm);
      mat1.push.apply(mat1, matindices(offset[j] * den, frd1[j][0], parseFloat(ppcm)));
  //console.log(mat1);
}

    console.log(mat1);

    function matindices(from, diff, to) {
      //fucntion which implements range list of scilab like matindices[1:2:10] gives 1.    3.    5.    7.    9.
      //which was not possible in js so made function
      var arrayind = [];
      for (i = 0; i <= to; i++) {
        arrayind.push(i);
        i = i + diff - 1;
        if (i >= to) {
          return arrayind;
        }
      }


}

Вы можете взять упрощенный цикл, который начинается с from и берет diff в качестве значения приращения.

В конце функции возвращаем массив без проверки внутри цикла for.

Вам нужно объявить все переменные в используемой области видимости, а также в функции, в которой вы используете переменную с таким же именем i, который может сталкиваться с глобальными переменными.

Необъявленные переменные в Javascript объявлены как глобальные переменные при первом использовании.

function matindices(from, diff, to) {
    var arrayind = [], i;
    for (i = from; i <= to; i += diff) {
        arrayind.push(i);
    }
    return arrayind;
}

var frequ = [[1], [3]],
    ppcm = 3,
    den = 1,
    offset = [[0], [0]],
    i;
    
for (i = 0; i < frequ.length; i++) {
    console.log(matindices(offset[i][0] * den, frequ[i][0], ppcm));
}

Другие вопросы по тегам