Как выполнить глубокое сканирование значений объектов, включая дочерние массивы - PullRequest
1 голос
/ 05 июня 2019

Я пытаюсь получить все значения объекта. Объект также включает в себя массивы, и эти массивы объектов содержат массивы.

const iterate = (obj) => {
    Object.keys(obj).forEach(key => {
        console.log(`key: ${key}, value: ${obj[key]}`)

        if (typeof obj[key] === 'object') {
            iterate(obj[key])
        }
    })
}

В настоящее время отображаются только объекты «более высокого уровня»

Например, если у меня есть

class foo;
a: string;
b: string;
c SomeObject[];

Часть SomeObject всегда является просто «объектом». Но мне тоже нужны значения этих объектов.

1 Ответ

0 голосов
/ 05 июня 2019

Просто проверьте, является ли он массивом, и обработайте его специально:

const iterate = (obj) => {
    Object.keys(obj).forEach(key => {
        const value = obj[key];
        console.log(`key: ${key}, value: ${value}`)

        if (Array.isArray(obj)) {
            for (let arrayItem of obj) {
                iterate(arrayItem);
            }
        }

        else if (typeof value === 'object') {
            iterate(value)
        }
    })
}

Это должно работать для всех литералов JSON, но не будет работать интуитивно для таких вещей, как наборы или карты.

...