Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

como percorrer esse objeto ?

{
    "nextId": 2,
    "grades": [
        {
            "id": 1,
            "student": "Loiane Groner",
            "subject": "01 - JavaScript",
            "type": "Fórum",
            "value": 15,
            "timestamp": "2020-05-19T18:21:24.958Z"
        },
        {
            "id": 2,
            "student": "Loiane Groner",
            "subject": "02 - Node",
            "type": "Fórum",
            "value": 5,
            "timestamp": "2020-05-19T18:21:24.964Z"
        },

        ]
}

Estou tentando percorrer esse objeto json com forEach , mas ele me retorna esse erro forEach is not a function.

Porem vi que o forEach só vai percorrer se for um array, ele teria que estar dentro de [], então minhas duvidas são as seguintes:

  • Como percorrer um objeto que esta entre {} ??
  • Se ele estivesse dentro de [] eu poderia usar o fotEach ? E qual a forma correta de percorrer ele, porque dentro dele tem um outro array de objetos que chama "grades".

Obrigado

4 respostas

Olá Daniel, tudo bem com você?

Como percorrer um objeto que esta entre {} ??

Não é comum percorrer objetos, normalmente utilizamos por exemplo:

Object.keys( objeto)

Para pegar as chaves, e:

Object.values(objeto)

Para pegar os valores :)

E também poderíamos fazer um ( assumindo que esse objeto que você me mandou se trata de uma constante chamada data) :

for( const chave in data){
    console.log("Chave" + chave);
    console.log("Valor: " + data[chave]);
} 

Se ele estivesse dentro de [] eu poderia usar o fotEach ? E qual a forma correta de percorrer ele, porque dentro dele tem um outro array de objetos que chama "grades".

Sim, se tivessemos um array de objetos igual esse que você mandou poderiamos, exemplo:

const dados = [
{
    "nextId": 2,
    "grades": [
        {
            "id": 1,
            "student": "Loiane Groner",
            "subject": "01 - JavaScript",
            "type": "Fórum",
            "value": 15,
            "timestamp": "2020-05-19T18:21:24.958Z"
        },
        {
            "id": 2,
            "student": "Loiane Groner",
            "subject": "02 - Node",
            "type": "Fórum",
            "value": 5,
            "timestamp": "2020-05-19T18:21:24.964Z"
        },

        ]
},
{
    "nextId": 3,
    "grades": [
        {
            "id": 2,
            "student": "Marco Bruno",
            "subject": "02 - Css"
            "type": "Fórum",
            "value": 15,
            "timestamp": "2020-05-19T18:21:24.958Z"
        },
        {
            "id": 3,
            "student": "Marco Burno,
            "subject": "04 - React",
            "type": "Fórum",
            "value": 5,
            "timestamp": "2020-05-19T18:21:24.964Z"
        },

        ]
}

AI poderíamos fazer:

dados.forEach( dado => console.log(dado))

Onde na primeira iteração seria o primeiro objeto com nome "Loiane" e na segunda o Marco Bruno

E qual a forma correta de percorrer ele, porque dentro dele tem um outro array de objetos que chama "grades".

Então ai depende do que queremos :)

1) Percorrer apenas as grades

Aqui nem precisamos ter um array de objetos, dado que grades é um array podemos fazer:

const pessoa = {
    "nextId": 2,
    "grades": [
        {
            "id": 1,
            "student": "Loiane Groner",
            "subject": "01 - JavaScript",
            "type": "Fórum",
            "value": 15,
            "timestamp": "2020-05-19T18:21:24.958Z"
        },
        {
            "id": 2,
            "student": "Loiane Groner",
            "subject": "02 - Node",
            "type": "Fórum",
            "value": 5,
            "timestamp": "2020-05-19T18:21:24.964Z"
        },

        ]
}

pessoa.grades.forEach( grade => console.log(grade))

2) Percorrer tanto o array de objetos, quanto as grades

Agora vamos voltar para aquele exemplo de um array de objetos, ai caso quiséssemos trabalhar tanto com a pessoa quanto com o objeto grades, poderáimos fazer:

dados.forEach( dado => {
    dado.grades.forEach(grade => ....)
}

E dessa maneira iriamos pegar na primeira iteração o objeto com nome "Loaine" e ir nas grades dela, e na segunda iteração no Marco Bruno e pegar a grades dele :)

Conseguiu Compreender ?

Abraços e Bons Estudos!

Obrigado Geovani pela ajuda.

 .post((req,res) =>{
            const users = getUsers() 

            users.push(req.body)
            saveUsers(users)

            res.send('0k')     
        })

Eu coloquei nesse array um colchetes para usar o forEach, mas quando do .pust, ele adiciona fora do array grades, se eu coloco users.grades.push(req.body) ele da erro.

Eu coloquei abaixo como ficou o array quando adiciono um registro com id 49, para ver se você consegue entender.

Como eu faço para colocar o registro dentro do array grades, como eu acesso o primeiro array e depois o segundo que é grades, como coloquei manual o colchetes ficou um array e dentro dele tem outro array grades.

[ {
    "nextId": 2,
    "grades": [
        {
            "id": 1,
            "student": "Loiane Groner",
            "subject": "01 - JavaScript",
            "type": "Fórum",
            "value": 15,
            "timestamp": "2020-05-19T18:21:24.958Z"
        },
        {
            "id": 2,
            "student": "Loiane Groner",
            "subject": "02 - Node",
            "type": "Fórum",
            "value": 5,
            "timestamp": "2020-05-19T18:21:24.964Z"
        },

        ]
},
{
        "id": 49,
        "student": "Roberto Achar",
        "subject": "03 - React",
        "type": "Fórum",
        "value": 10
    }  ]

Então Daniel,

Você quer inserir:

{
        "id": 49,
        "student": "Roberto Achar",
        "subject": "03 - React",
        "type": "Fórum",
        "value": 10
    }

Dentro de grades:

    "grades": [
        {
            "id": 1,
            "student": "Loiane Groner",
            "subject": "01 - JavaScript",
            "type": "Fórum",
            "value": 15,
            "timestamp": "2020-05-19T18:21:24.958Z"
        },
        {
            "id": 2,
            "student": "Loiane Groner",
            "subject": "02 - Node",
            "type": "Fórum",
            "value": 5,
            "timestamp": "2020-05-19T18:21:24.964Z"
        },

        ]

Ai temos aquela questão:

users.grades.push(req.body)

Isso existe? Vamos ver:

[
-------------------------------------------------------------------------------
 {
    "nextId": 2,
    "grades": [
        {
            "id": 1,
            "student": "Loiane Groner",
            "subject": "01 - JavaScript",
            "type": "Fórum",
            "value": 15,
            "timestamp": "2020-05-19T18:21:24.958Z"
        },
        {
            "id": 2,
            "student": "Loiane Groner",
            "subject": "02 - Node",
            "type": "Fórum",
            "value": 5,
            "timestamp": "2020-05-19T18:21:24.964Z"
        },

        ]
},
----------------------------------------------------------------------------------------
{
        "id": 49,
        "student": "Roberto Achar",
        "subject": "03 - React",
        "type": "Fórum",
        "value": 10
    } 
----------------------------------------------------------------------------------------- 
]
`

Veja que estamos falando de um array, e não temos propriedades em arrays, apenas em objetos :)

Então na verdade o que temos é que o primeiro elemento do meu array tem esse atributo, então:

users[0]

Para pegar o primeiro elemento

users[0].grades

Para pegar o item grades do primeiro elemento, e ai sim fazer a inserção:

users[0].grades.push(req.body)

E dessa forma não teremos erro :)

Conseguiu compreender?

Abraços e Bons Estudos!

solução!

Nossa muito obrigado Geovani , você esta me ajudando muito, estou começando a entender melhor depois da sua ajuda.

Muito obrigado