2014-10-29 4 views
1

Я сражаюсь с итеративной функцией. У меня есть этот объект:Итерация объекта в javascript, сохранение родителей

var table = { 
    "general": { 
     "amount": ["mandatory", "isAmount"], 
     "order_id": ["mandatory", "isString"] 
    }, 
    "card": { 
     "number": ["Regex:/^[0-9]{16}$/", "mandatory"], 
     "expiry": { 
      "month": ["Regex:/^[0-9]{2}$", "mandatory"], 
      "year": ["Regex:/^[0-9]{4}$/", "mandatory"] 
     }, 
     "network": ["List:maestro|visa|mastercard|amex|jcb", "mandatory"], 
     "cvv": ["Regex:/^[0-9]{3,4}$/", "mandatory"] 
    } 
} 

цель здесь, чтобы быть в состоянии console.log этого:

general.amount : ["mandatory", "isAmount"] 
general.order_id: ["mandatory", "isString"] 
card.number: ["Regex:/^[0-9]{16}$/", "mandatory"] 
card.expiry.month: ["Regex:/^[0-9]{2}$", "mandatory"] 
card.expiry.year: ["Regex:/^[0-9]{4}$/", "mandatory"] 
card.network: ["List:maestro|visa|mastercard|amex|jcb", "mandatory"] 
card.cvv: ["Regex:/^[0-9]{3,4}$/", "mandatory"] 

-> Ведение родителей для каждого поля, и показать их.

На самом деле, я пробовал много вещей, вот начало:

function boucle(object, parent) { 
    for (var key in object) { 
     if (object.hasOwnProperty(key)) { 
      var value = object[key]; 
      if (value.length) { 
       console.log(parent + '.' + key); 
      } else { 
       if (parent) { 
        parent += "."+key; 
       } else { 
        parent = key; 
       } 
       boucle(value, parent) 
      } 
     } 
    } 
} 

И я не знаю, куда идти. Нужно ли мне менять объект?

Заранее спасибо

ответ

0
Use this. 
$.each(table,function(key1){ 
       $.each(table[key1],function(key2){ 
        if(table[key1][key2] instanceof Array){ 
         console.log(key1+'.'+key2+' :'+table[key1][key2][0]+','+table[key1][key2][1]); 
        }else{ 
         $.each(table[key1][key2],function(key3){ 
          console.log(key1+'.'+key2+'.'+key3+ ' :'+table[key1][key2][key3][0]+','+table[key1][key2][key3][1]); 
         }) 

        } 

       }) 
      }) 
+0

Спасибо, но я хочу, чтобы функция работала, даже если глубина исходного объекта составляет 4, 5 ... 100 независимо – Kai23

+0

Я только что дал вам представление об этой конкретной проблеме. Вы правильно указываете код для n-й глубины. Однако ваша проблема решена. –

2

Вот решение:

function boucle(obj, parent) { 
    for (var i in obj) { 
     var parent1 = (parent ? parent + '.' : '') + i; 
     if (obj.hasOwnProperty(i)) { 
      if (obj[i].length) { 
       console.log(parent1); 
      } else { 
       boucle(obj[i], parent1); 
      } 
     } 
    } 
} 
Смежные вопросы