Перебирайте вложенные объекты с помощью jQuery

Привет всем, я пытаюсь найти наиболее динамичный способ циклически проходить по массиву и возвращать определенные значения, возвращать конкретные значения... JSON глубоко структурирован и может измениться. Может ли быть формула $.each(), которая может помочь?

Пример:

var myobj = {
    obj1: { key1: 'val1', key2: 'val2' },
    obj2: { key1: '2val1', 
           key2: { nest1: 'val1', nest2: 'val2', nest3: 'val3' }, 
           key3: { nest1: 'K3val1', nest2: 'K3val2', 
                 nest3: [
                         { nest1: 'val1', nest2: 'val2', nest3: 'val3' }, 
                         { nest1: 'val1', nest2: 'val2', nest3: 'val3' }
                        ]
                 }
          },
    obj3: { key1: 'dddddval1', key2: 'val2' }
    }

Теперь скажем, я хочу получить "K3val2"значение, но вместо жесткого кодирования это так: myobj.obj2.key3.nest2 есть ли динамичный способ сделать это с $.each() Mybe?

1 ответ

Решение

Вы можете просто вкладывать звонки в $.each:

Живой Пример | Живой источник

// Loop the top level
$.each(myobj, walker);

function walker(key, value) {
    // ...do what you like with `key` and `value`

    if (value !== null && typeof value === "object") {
        // Recurse into children
        $.each(value, walker);
    }
}

Если вы хотите знать, насколько вы глубоки, вы можете сделать это тоже:

Живой Пример | Живой источник

var path = "";

// Loop the top level
$.each(myobj, walker);

function walker(key, value) {
    var savepath = path;

    path = path ? (path + "." + key) : key;

    // ...do what you like with `key` and `value`

    if (value !== null && typeof value === "object") {
        // Recurse into children
        $.each(value, walker);
    }

    path = savepath;
}
Другие вопросы по тегам