2014-09-03 3 views
-2

Я хотел бы знать рекурсивные ключи в объекте JSON. Например, объект JSON, какПолучить ключ, основанный на значении JSON

{ 
    "Division1" : { 
     "checked": true, 
     "level": 1, 
     "District1-1": { 
      "checked": true, 
      "level": 2, 
      "Area1-1-1": { 
       "checked": true, 
       "level": 3, 
       "Project1-1-1-1": { 
        "checked": true, 
        "level": 4 
       } 
      }, 
      "Area1-1-2": { 
       "checked": true, 
       "level": 3, 
       "Project1-1-2-1": { 
        "checked": true, 
        "level": 4, 
        "05": { 
         "checked": true, 
         "level": 5 
        } 
       } 
      } 
     } 
    } 
} 

И я могу найти «Project1-1-1-1», я должен быть в состоянии найти и сохранить «Area1-1-1», «District1-1», «Division1» в массиве, как выполнить рекурсивный поиск для хранения ключей родителя/дедушки и бабушки?

Я использую JavaScript, чтобы сделать это возможным

Текущий JS:

 var parent = []; 
     $.test.getObjects = function(obj, key, val) { 
      var objects = []; 
      for (var i in obj) { 

       if (!obj.hasOwnProperty(i)){ continue; } 
       if (typeof obj[i] == 'object') { 
        // console.log(i); 
        parent.push(i); 
        objects = objects.concat($.test.getObjects(obj[i], key, val)); 
       } 
       //if key matches and value matches or if key matches and value is not passed (eliminating the case where key matches but passed value does not) 
       if (i == key && obj[i] == val || i == key && val == '') { // 
        objects.push({"parent": parent,"children": obj}); 
       } else if (obj[i] == val && key == ''){ 
        //only add if the object is not already in the array 
        if (objects.lastIndexOf(obj) == -1){ 
         objects.push({"parent": parent,"children": obj}); 
        } 
       } 
      } 
      return objects; 
     }; 
+1

Не могли бы вы добавить код, который вы должны найти ** Project1-1-1-1 **? – funkwurm

+1

В чем вопрос? Что значит «хранить родительские/дедушкиные ключи»? –

+0

@funkwurm Я уточнил вопрос – cs1193

ответ

0

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

AFAIK, Javascript массивы/словари не хранят родительские отношения, поэтому единственный способ, которым я могу это сделать, - проверить все дерево, начиная с родительского , Шаги, которые должны следовать рекурсивно:

1- Получить массив детей (с использованием метода Object.keys (Var))

2- Если это не ключ, который вы ищете, запустите рекурсивный метод для каждого ребенка. В качестве параметра вы должны передать массив, накапливая все предыдущие ключи, полученные в предыдущих прогонах, и добавьте ключ к детям, которые вы собираетесь посетить.

3- Если это ключ, который вы ищете, просто храните так называемый массив, который вы накапливали, и вот вы где!

После этого вы должны иметь возможность сделать простой рекурсивный метод с несколькими параметрами: текущей точкой проверяемого массива и так называемым накопительным массивом, который потенциально станет результатом.

Я не знаю, есть ли более простой подход, чем это.

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