2016-01-06 2 views
-2

Я пытаюсь написать цикл JavaScript, чтобы превратить свой объект JavaScript из этого,Петля для преобразования объекта JavaScript

var d = { 
     "time_completed": 1420199657, 
     "xid": "-dqAeAEjGxCDcjqrxHsraER3yWqew4xS", 
     "title": "for 8h 46m", 
     "time_created": 1420167382, 
     "time_updated": 1420200033, 
     "details": { 
     "body": 0, 
     "sound": 12598, 
     "tz": "America/Chicago", 
     "awakenings": 0, 
     "light": 18970, 
     "mind": 0, 
     "asleep_time": 1420168079, 
     "awake_time": 1420199400, 
     "awake": 707, 
     "rem": 0, 
     "duration": 32275, 
     "smart_alarm_fire": 1420199640, 
     "quality": 100, 
     "sunset": 0, 
     "sunrise": 0 
     }, 
     "date": 20150102, 
     "shared": true, 
     "snapshot_image": "/nudge/image/e/1420200033/-dqAeAEjGxCDcjqrxHsraER3yWqew4xS/MSh0lOvjHDY.png", 
     "sub_type": 0 
    }; 

к этому,

var d = {"sleep":[ 
    {"time_completed":"time_completed"}, 
    {"xid":"xid"}, 
    {"title":"title"}, 
    {"time_created":"time_created"}, 
    {"time_updated":"time_updated"}, 
    {"details": [ 
    {"body":"body"}, 
    {"sound":"sound"}, 
    {"tz":"tz"}, 
    {"awakenings":"awakenings"}, 
    {"light":"light"}, 
    {"mind":"mind"}, 
    {"asleep_time":"asleep_time"}, 
    {"awake_time":"awake_time"}, 
    {"awake":"awake"}, 
    {"rem":"rem"}, 
    {"duration":"duration"}, 
    {"smart_alarm_fire":"smart_alarm_fire"}, 
    {"quality":"quality"}, 
    {"sunset":"sunset"}, 
    {"sunrise":"sunrise"} 
    ]}, 
    {"date":"date"}, 
    {"shared":"shared"}, 
    {"snapshot_image":"snapshot_image"}, 
    {"sub_type":"sub_type"} 
]}; 

В d объект не всегда будет иметь те же элементы (ключи) или глубина (дети). Поэтому я пытаюсь создать простой цикл для извлечения структуры (ключей и дочерних элементов) объекта JavaScript. Может ли кто-нибудь предложить мне решение?

+1

Вы уже что-то пробовали? Покажите нам, что вы делали до сих пор, чтобы достичь своей цели. – juliobetta

+0

Почему вы хотите преобразовать свой объект? – MinusFour

+0

Здесь нет JSON. Это простой старый объект JavaScript. –

ответ

0

Вы можете использовать Object.keys() и рекурсию перебирать свойства (вложенный) объекта, и Array.prototype.map(), чтобы преобразовать его:

function mapKeys(obj) { 
    return Object.keys(obj).map(function(key) { 
     var newObj = {}; 
     newObj[key] = (typeof obj[key] === 'object') ? mapKeys(obj[key]) : key; 
     return newObj; 
    }); 
} 

var result = { 
    sleep: mapKeys(d) 
}; 

console.log(result); 
+0

Мне действительно не нравится идея ложного кода. –

+0

Всё зависит от меня. Кто-то может скопировать его, кто-то может чему-то научиться, анализируя код. – madox2

+0

Это действительно теоретическая возможность, хотя неспособность OP писать код for-loop плохо означает, что он изучает что-то из решения, которое использует «Object.keys», функции более высокого порядка, такие как «map», и тернарный оператор. Мне просто интересно, будет ли судьба SO оставаться людьми, которые задают вопросы, которые они не представляют, как решить, и другие люди, пишущие код для них. –

1

Простого решение:

var transformed = {}; 

function transform(obj){ 
    var arr = [], prop, inner_obj; 
    for(prop in obj){ 
     inner_obj = {}; 
     inner_obj[prop] = (typeof obj[prop] === 'object')? transform(obj[prop]) : obj[prop]; 
     arr.push(inner_obj); 
    } 
    return arr; 
} 

transformed['sleep'] = transform(d); 
console.log(transformed); 
0

Вы должны написать на английском языке, что вы хотите сделать. Это может выглядеть примерно так:

  1. Создайте новый массив, чтобы сохранить результат.
  2. Прокрутите все свойства объекта.
  3. Для каждого свойства создайте небольшой объект, чья единственная пара ключей и значений имеет как ключ, так и значение, имеющее имя свойства. Добавьте этот маленький объект в новый массив.
  4. За исключением, если свойство имеет объект как его значение, повторите весь этот процесс для под-объекта.
  5. Создайте объект результата с единственным свойством sleep с новым массивом в качестве его значения.

Теперь вам нужно выяснить, как делать каждый шаг. Например, для второго шага вам нужно знать, как найти все свойства объекта. Вы знаете, как это сделать? Вы можете использовать Google для получения всех свойств объекта javascript. Вы найдете там что-то, что называется Object.keys(). Затем вам нужно перебрать эти ключи. Если вы не знаете, как это сделать, есть хороший новый учебник, который только что поднялся here. Было бы неплохо прочесть это.

Как добавить пару ключ-значение к объекту? Это очень просто, а также в учебнике: new_object[key] = key.

Поскольку шаг 4 немного сложнее, пропустите его на первой итерации и получите свою программу только с одним уровнем вложенности.

Если у вас возникли проблемы при выполнении этого, вам понадобится debug вашей программы. Есть хороший учебник по этой теме here.

Продолжить процесс для остальных шагов, пока у вас не будет действующей программы JS.

Смежные вопросы