2014-02-07 5 views
0

Мне нужна помощь с JavaScript. Проблема в том, что у меня есть данные JSON, похожие на показанные ниже, но проблема в том, что я не могу получить доступ ко всем объектам. С моей функцией я могу получить доступ к ["x", "y", "z"], но я не могу получить других «p, q, rk, a». Кто-нибудь может помочь мне зафиксировать эту вещь, пожалуйста, не используйте Object.Keys(). Я не знаю, как итерации внутри Json Data.JSON Собственное название недвижимости


var Objectkeys = function(obj){ 
    a = [] 
    for(var prop in obj){ 
    if(obj.hasOwnProperty(prop)){ 
     a.push(prop) 
     } 
    } 
    return a; 
}; 
var obj = { 
    x: 1, 
    y: 2, 
    z: { 
     p: "Hello", 
     q: "Master", 
     r: { 
      k: "Rotten", 
      a: "apple" 
     } 
    } 
}; 
window.onload = function() { 
console.log(Objectkeys(obj)); 
//console.log(Object.keys(obj)); 
} 

Спасибо

+0

Помните, что вы здесь не JSON, это просто объект JavaScript. JSON - это не JavaScript, а формат сериализации (с синтаксисом, совместимым с JavaScript). В JavaScript переменная, содержащая JSON, будет иметь строку типа. После разбора/оценки этой строки вы получите объект. – chiccodoro

ответ

0

Если захватывая ключи объекта все вы после этого вы можете использовать рекурсивную функцию:

function getKeys(obj) { 
    var arr = []; 
    (function loop(obj) { 
    for (var k in obj) { 
     if (obj.hasOwnProperty(k)) { 
     arr.push(k); 
     if (typeof obj[k] === 'object') { 
      loop(obj[k]); 
     } 
     } 
    } 
    }(obj)); 
    return arr; 
} 

console.log(getKeys(obj)); // ["x", "y", "z", "p", "q", "r", "k", "a"] 

Demo.

-1

Я не знаком с JS, но не вы должны проверить в первую очередь, если propertys содержит объекты, и если да итерация корыта те? Итак, оператор for в выражении if?

0

Вам нужно перебирать вложен объект также:

var Objectkeys = function(obj){ 
     a = [] 
     for(var prop in obj){ 
      if (obj.hasOwnProperty(prop)) { 
       a.push(prop); 
       if (typeof obj[prop] === 'object') { 
        a = a.concat(Objectkeys(obj[prop])); 
       } 
      } 
     }; 
     return a; 
    }; 
+0

То, о чем я думал. – SaifDeen

+0

С вашим решением, Получение вывода как ["x", "y", "p", "q", "k", "a"], но проблема в том, что отсутствуют "z" и "r". некоторые помогают исправить это. – user3237973

+0

Я отредактировал пример. –

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