Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как получить результат работы цикла в виде массива. (https://javascript.ru/forum/misc/52158-kak-poluchit-rezultat-raboty-cikla-v-vide-massiva.html)

Tungus 06.12.2014 11:14

Как получить результат работы цикла в виде массива.
 
Подскажите пожалуйста, возможно ли получить результат всех итераций цикла while в виде массива?
Ниже привожу скрипт.
function calculate(data){
 var calc = {};
 try {
      
      var x = data[0] ||0;
      var y = data[1] ||0;
      var z = data[2] ||0;
      var massive = [];
      if (x+y+z==0)
        return calc;
      while((y-x)>z){
         x+=z;
         d=x*3,14;
     }
         massive.push(x,d);
     console.log(massive);
     return massive;
  }
  catch(err){
    return calc;
  }
}


В результате получил в виде массива лишь последнюю итерацию. А хотелось бы получить все.
итерация 1 [x1,d1]
итерация 2 [x2,d2]
..................
итерация n [xn,dn]

devote 06.12.2014 11:22

Tungus,
massive.push(x,d); засунь внутрь оператора while, после вычислений...

Цитата:

Сообщение от Tungus
d=x*3,14;

А так же числа с плавающей точкой пишутся через точку а не запятую... И вообще я так понимаю это число PI тогда нужно: d=x*Math.PI;

ruslan_mart 06.12.2014 12:50

Зачем try-catch?

function calculate(data) {
    var d,
        x = data[0] || 0,
        y = data[1] || 0,
        z = data[2] || 0,
        massive = [];
    if(x + y + z == 0) return {};
    while(y - x > z) {
        x += z;
        massive.push(x, x * Math.PI);
    }
    return massive;
}

Tungus 06.12.2014 13:11

Спасибо за помощь
 
Спасибо большое. А проверка, это потому эта функция используется в более длинном скрипте, она нужна там сложная математика.

Tungus 06.12.2014 13:30

Ой Ой действительно получился цикл:
Вид цикла [x1, d1,x2,d2,........ xn,dn]- если честно меня это обрадовало.
А как получить [x1,d1],[x2,d2],....[xn,dn]
Это возможно?

ruslan_mart 06.12.2014 13:48

function calculate(data) {
    var d,
        x = data[0] || 0,
        y = data[1] || 0,
        z = data[2] || 0,
        massive = [];
    if(x + y + z == 0) return {};
    while(y - x > z) {
        x += z;
        massive.push([x, x * Math.PI]);
    }
    return massive;
}

danik.js 06.12.2014 14:33

Цитата:

Сообщение от Tungus
massive

http://slovari.yandex.ru/massive/en/
http://slovari.yandex.ru/array/en-ru/informatics

Tungus 06.12.2014 20:46

Спасибо

Tungus 08.12.2014 07:26

Еще раз большое спасибо!
Еще один вопрос. Возможно ли полученный массив вида [[x1,d1],[x2,d2],.....[xn,dn]] преобразовать в
xd1=[x1,d1];
xd2=[x2,d2];
.................
xdn=[xn,dn]

Я перечел все, что касается операторов для массивов и не смог решить.

Aetae 08.12.2014 08:17

Можно, но не нужно. Если у вас в коде есть переменные с цифренным индикатором, то с великой вероятностью это говнокод. Массивы именно для таких задач и существуют. Работайте напрямую с массивом.

Tungus 08.12.2014 12:41

Что за зверь -"переменные с цифренным индикатором" ?

devote 08.12.2014 13:07

Цитата:

Сообщение от Tungus
Что за зверь -"переменные с цифренным индикатором" ?

он про эти переменные имел ввиду:
xd1
xd2
...
xdn

Tungus 08.12.2014 13:19

На самом деле можно переименовать любую переменную. Массив у меня обозван massive, о получается он в результате работы цикла. Я просто не нашел решения для своей задачи.
"Еще один вопрос. Возможно ли полученный массив вида [[x1,d1],[x2,d2],.....[xn,dn]] преобразовать в
xd1=[x1,d1];
xd2=[x2,d2];
.................
xdn=[xn,dn]

Я перечел все, что касается операторов для массивов и не смог решить."
Не понимаю как разбить массив из двумерного во множество одномерных. Ведь в реальности в [x1,d1] и x1 и d1 это числа.
Если просто преобразовать массив massive =[[x,d],[a,b],.....[c,h]], (количество одномерных массивов при работе скрипта может быть разное) в massive ={[x,d],[a,b],.....[c,h]} было бы нормально для моей задачи.

Deff 08.12.2014 13:21

Цитата:

Сообщение от Tungus (Сообщение 345476)
Что за зверь -"переменные с цифренным индикатором" ?

ок-енно - оцифренный :)

Цитата:

var a =

Tungus 08.12.2014 13:26

:yes:

Tungus 08.12.2014 13:44

Я правильно понял, что эта задача не решаема?

Deff 08.12.2014 13:59

Tungus,
Возможно всё, нужно только желание и настойчивость(мне лично лень вникать в эту задачу) Как то пытался решать задачу загрузки картинок с произвольного домена через стандартную форму и input type="file";
Через полгода рытья доков и идей - решил

krutoy 08.12.2014 14:01

Цитата:

Сообщение от Tungus
Я правильно понял, что эта задача не решаема?

В твоем случае как то так можно
x1=1
x2=2
d1=1
d2=2

arr=[, [x1,d1],[x2,d2]]

for(i=0; i<=arr.length; i++){window["xd"+i]=arr[i]}
console.log(
xd1, xd2
)
//  [ 1, 1 ] [ 2, 2 ]

Но в общем случае -- нет. У тебя в массиве нет никаких имен, только значения. Чтобы сделать как ты хочешь, надо массив заполнять не переменными, а строками

Tungus 08.12.2014 14:20

Если не трудно несколько разъяснений :
Массив у меня получен в результате работы цикла while.
Я объявил его перед циклом arr=[], теперь мне объявить его arr=[,]?
Я получаю его arr.push([x,d])
Количество [x,d]- будет меняться при каждом выполнении скрипта, в зависимости от количества итераций.
Тогда под console.log как написать?

krutoy 08.12.2014 14:37

Tungus,
Тебе проще не трахаться, а начинать нумерацию с нуля
x0=0
x1=1
d0=0
d1=1

arr=[[x0,d0],[x1,d1]]

for(i=0; i<=arr.length; ++i){window["xd"+i]=arr[i]}

console.log(
xd0, xd1
)
// [ 0, 0 ] [ 1, 1 ]

Tungus 08.12.2014 15:49

Блин зараза, не получается получить это дело из под цикла.
Возможно зайти с заднего прохода:
Разбить массив [a,b,c,d,.........n] на [a,b],[c,d],...........[x,n]?

Deff 08.12.2014 15:58

Цитата:

Сообщение от Tungus
Блин зараза, не получается получить это дело из под цикла.

function calculate(data){
 var massive = [];
 var calc = {};
 try {
      var x = data[0] ||0;
      var y = data[1] ||0;
      var z = data[2] ||0;
      if (x+y+z==0)
        return calc;
      while((y-x)>z){
         x+=z;
         d=x*3,14;
     }
         massive.push(x,d);
     console.log(massive);
     return massive;
  }
  catch(err){
    return calc;
  }
}

Если не так - вынесите var massive = []; за функцию и обнуляйте при первом вызове итераций

Tungus 08.12.2014 16:59

Нашел более простой способ решения свой именно задачи, щасссссс спробую

Aetae 08.12.2014 18:17

Deff, я применил слово "цифренный" по аналогии с "буквенный", ибо слово цифровой нынче зарезервировано.:)

Tungus, ещё раз: что тебе мешает использовать массив по его прямому назначению? Зачем тебе обязательно создавать 100500 бессмысленных переменных?

Tungus 08.12.2014 18:23

Да на самом деле все же приходит с опытом. Почитал спецификацию, пошарил. И получил нужный мне результат. Это получилось так:
function calculate(data){
  var calc = {};
  try {
    
    var x = data[0] ||0;
    var y = data[1] ||0;
    var z = data[2] ||0;
    var massiveTable = [["CENTER", "CENTER"], ["CENTER", "CENTER"]]
    var massive = [];
    if (x+y+z==0)
      return calc;
    while((y-x)>z){
      x+=z;
      d=(x*Math.PI).toFixed(2);
      massive.push([x,d]);
     }
    massive.splice(0, 0, massiveTable);
    calc ['_massive_']=massive
    console.log(massive);
    return massive;
  }
  catch(err){
  return calc;
  }
}

Deff 08.12.2014 18:26

Цитата:

Сообщение от Aetae (Сообщение 345534)
Deff, я применил слово "цифренный" по аналогии с "буквенный", ибо слово цифровой нынче зарезервировано.:)

:dance: я даж не смотрел кто ( у мну днюха второй день, - отхожу)

danik.js 08.12.2014 18:27

Я что-то пропустил? Зачем у него try/catch?
И сколько вас таких. Одному уже кидал ссылку на перевод massive/array. Это болезнь какая-то заразная что-ли?

Tungus 08.12.2014 18:37

Ну с днем рождения , и всего хорошего через край что бы :)

Tungus 08.12.2014 18:38

На счет try/catch писал выше. А по остальному- я болен

danik.js 08.12.2014 19:33

Цитата:

Сообщение от Tungus
На счет try/catch писал выше.

Это что-ли?
Цитата:

Сообщение от Tungus
А проверка, это потому эта функция используется в более длинном скрипте, она нужна там сложная математика.

:lol:


Часовой пояс GMT +3, время: 09:23.