 
			
				01.04.2016, 17:32
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.09.2015 
					
					
					
						Сообщений: 38
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				помещение элементов в массив из объекта
			 
			
		
		
		
		здравствуйте. 
практикуюсь в js 
задача такая. есть объект. нужно его значения поместить в массив. у меня выводит массив в обратном порядке. 30, 15, 10, 5. а нужно наоборот - 5, 10, 15, 30. подскажите, что делаю неправильно
 
function listToArray(obj)
{
	var rez = new Array;
	
	if (obj.rest != null)
	{
		rez.push(obj.value);
		obj = obj.rest;
		listToArray(obj);
	}
	else
	{
		rez.push(obj.value);
		
	}
	
	document.write(rez);
	document.write("<br />");
}
a ={value:5, rest:{value:10, rest:{value:15, rest: {value: 30, rest: null}}}};
listToArray(a);
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.04.2016, 17:47
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 18.05.2011 
					
					
					
						Сообщений: 1,207
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		gazman,
  
function listToArray(obj) {
            if (obj.rest != null) {
                console.log(obj.value)
                rez.push(obj.value);
                obj = obj.rest;
                listToArray(obj);
            }
            else {
                rez.push(obj.value);
            }
        }
        var rez = new Array;
        a = { value: 5, rest: { value: 10, rest: { value: 15, rest: { value: 30, rest: null } } } };
        listToArray(a);
        alert(rez);
        document.write(rez.join("<br>")); //
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.04.2016, 18:21
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		  
function listToArray(obj) {
   return obj.rest ? [obj.value].concat(listToArray(obj.rest)) : [obj.value];
        }
 a = { value: 5, rest: { value: 10, rest: { value: 15, rest: { value: 30, rest: null } } } };
 alert(listToArray(a));
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.04.2016, 18:46
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 18.05.2011 
					
					
					
						Сообщений: 1,207
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		  
function listToArray(obj) {
            var rez = [];
            JSON.stringify(obj).replace(/\"value\":\d+/g, function (str) { rez.push(str.split(':')[1]) });
            return rez;
        }
        var a = { value : 5, rest: { value : 10, rest: { value: 15, rest: { value: 30, rest: null } } } };
        alert(listToArray(a))
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.04.2016, 18:50
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		destus, 
 что быстрее парсить или рекурсия?    
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.04.2016, 19:03
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 18.05.2011 
					
					
					
						Сообщений: 1,207
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Для такого небольшого объекта в принципе одинаково. 
var start = performance.now();
        for (var i = 0; i < 100000; i++)
        {
        function listToArray(obj) {
            var rez = [];
            JSON.stringify(obj).replace(/\"value\":\d+/g, function (str) { rez.push(str.split(':')[1]) });
            return rez;
        }
        var a = { value: 5, rest: { value: 10, rest: { value: 15, rest: { value: 30, rest: null } } } };
        }
        alert(performance.now()-start)
var start = performance.now();
        for (var i = 0; i < 100000; i++)
            {
        function listToArray(obj) {
            return obj.rest ? [obj.value].concat(listToArray(obj.rest)) : [obj.value];
        }
        a = { value: 5, rest: { value: 10, rest: { value: 15, rest: { value: 30, rest: null } } } };
        }
        alert(performance.now()-start)
 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось destus, 01.04.2016 в 19:06.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				01.04.2016, 19:23
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		destus, 
 твой вариант быстрее.    
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				02.04.2016, 21:45
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.09.2015 
					
					
					
						Сообщений: 38
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 как сделать, чтобы массив объявлялся внутри функции, а функция выводила этот массив? 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				02.04.2016, 21:46
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.09.2015 
					
					
					
						Сообщений: 38
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от destus
			 
		
	 | 
 
	
		gazman, 
 
function listToArray(obj) {
            if (obj.rest != null) {
                console.log(obj.value)
                rez.push(obj.value);
                obj = obj.rest;
                listToArray(obj);
            }
            else {
                rez.push(obj.value);
            }
        }
        var rez = new Array;
        a = { value: 5, rest: { value: 10, rest: { value: 15, rest: { value: 30, rest: null } } } };
        listToArray(a);
        alert(rez);
        document.write(rez.join("<br>")); //
	 | 
 
	
 
 как сделать, чтобы массив объявлялся внутри функции, а функция выводила этот массив?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				02.04.2016, 22:00
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
			 | 
			  | 
			
				
				
					Регистрация: 02.04.2016 
					
					
					
						Сообщений: 50
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от рони
			
		
	 | 
 
	| 
		что быстрее парсить или рекурсия?
	 | 
 
	
 
 в общем случае парсить в сотни раз быстрей, а по памяти рекурсия соснет и в тысячи. Вы что-то фигню какую то сморозили. Особенно учитывая то, что в JS нет ТСО(или в ES6 есть?) Первый раз слышу подобное заявление. Или это типа, шутка была?  
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось protoquest, 02.04.2016 в 22:06.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 
 
 
 
	 | 
 
 
 |