Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.04.2016, 17:32
Аспирант
Отправить личное сообщение для gazman Посмотреть профиль Найти все сообщения от gazman
 
Регистрация: 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);
Ответить с цитированием
  #2 (permalink)  
Старый 01.04.2016, 17:47
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 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>")); //
Ответить с цитированием
  #3 (permalink)  
Старый 01.04.2016, 18:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064


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));
Ответить с цитированием
  #4 (permalink)  
Старый 01.04.2016, 18:46
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 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))
Ответить с цитированием
  #5 (permalink)  
Старый 01.04.2016, 18:50
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

destus,
что быстрее парсить или рекурсия?
Ответить с цитированием
  #6 (permalink)  
Старый 01.04.2016, 19:03
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 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.
Ответить с цитированием
  #7 (permalink)  
Старый 01.04.2016, 19:23
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

destus,
твой вариант быстрее.
Ответить с цитированием
  #8 (permalink)  
Старый 02.04.2016, 21:45
Аспирант
Отправить личное сообщение для gazman Посмотреть профиль Найти все сообщения от gazman
 
Регистрация: 02.09.2015
Сообщений: 38

как сделать, чтобы массив объявлялся внутри функции, а функция выводила этот массив?
Ответить с цитированием
  #9 (permalink)  
Старый 02.04.2016, 21:46
Аспирант
Отправить личное сообщение для gazman Посмотреть профиль Найти все сообщения от gazman
 
Регистрация: 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>")); //
как сделать, чтобы массив объявлялся внутри функции, а функция выводила этот массив?
Ответить с цитированием
  #10 (permalink)  
Старый 02.04.2016, 22:00
Аспирант
Посмотреть профиль Найти все сообщения от protoquest
 
Регистрация: 02.04.2016
Сообщений: 50

Сообщение от рони
что быстрее парсить или рекурсия?
в общем случае парсить в сотни раз быстрей, а по памяти рекурсия соснет и в тысячи. Вы что-то фигню какую то сморозили. Особенно учитывая то, что в JS нет ТСО(или в ES6 есть?) Первый раз слышу подобное заявление. Или это типа, шутка была?

Последний раз редактировалось protoquest, 02.04.2016 в 22:06.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив из элементов другого массива, взятых в случайном порядке Basil_JS Общие вопросы Javascript 6 12.04.2015 13:07
Получить массив без повторяющихся элементов truten Общие вопросы Javascript 5 15.12.2013 20:35
Удалить и вернуть массив из удаленных элементов splice Paulyyy Общие вопросы Javascript 15 29.05.2013 15:36
Упорядочить заданный числовой массив X (M) в порядке убывания значений его элементов rjabijj Общие вопросы Javascript 6 06.07.2012 21:34
Упорядочить заданный числовой массив X (M) в порядке убывания значений его элементов. Drimmer Серверные языки и технологии 0 02.07.2012 18:22