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,123
|
|
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,123
|
|
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,123
|
|
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.
|
|
|
|