Выдать в течение цикла, который выполняется один раз в 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));
}