Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   помещение элементов в массив из объекта (https://javascript.ru/forum/misc/62259-pomeshhenie-ehlementov-v-massiv-iz-obekta.html)

gazman 01.04.2016 17:32

помещение элементов в массив из объекта
 
здравствуйте.
практикуюсь в 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);

destus 01.04.2016 17:47

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

:-?
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));

destus 01.04.2016 18:46

:-?
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

destus,
что быстрее парсить или рекурсия? :)

destus 01.04.2016 19:03

Для такого небольшого объекта в принципе одинаково.
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)

рони 01.04.2016 19:23

destus,
твой вариант быстрее. :)

gazman 02.04.2016 21:45

как сделать, чтобы массив объявлялся внутри функции, а функция выводила этот массив?

gazman 02.04.2016 21:46

Цитата:

Сообщение от destus (Сообщение 412751)
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>")); //

как сделать, чтобы массив объявлялся внутри функции, а функция выводила этот массив?

protoquest 02.04.2016 22:00

Цитата:

Сообщение от рони
что быстрее парсить или рекурсия?

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


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