Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Loop em objetos - determinar um objeto que altera-se dinamicamente

Estou fazendo um GET de uma API do elasticsearch trazendo os campos de um índice elasticsearch. No exemplo abaixo o json retornado é do indice "products" e tenho que capturar num array o nome dos campos (ex: CATEGORY, END_DATE, etc)

#"products" é o nome do indice, esta string altera-se conforme o indice buscado.
{
  "products": {
    "mappings": {
      "properties": {
        "CATEGORY": {
          "type": "keyword"
        },
        "END_DATE": {
          "type": "date",
          "format": "[yyyyMMdd]"
        },
        "PRICE": {
          "type": "double"
        },
        "PRODUCT": {
          "type": "keyword"
        },
        "START_DATE": {
          "type": "date",
          "format": "[yyyyMMdd]"
        }
      }
    }
  }
}
const getIndexFields2 = () =>{
    //nesta url fixa o indice alvo está representado como "products", será dinâmico futuramente, talvez via parâmetro de função
    return fetch(`http://localhost:9200/products/_mapping/?format=json`)
    .then(resposta =>{    return  resposta.json()       })
    .then(data=>{
        //Objects.entries(data.{nome_do_indice_recebido_aqui}.mappings.properties) 
        const camposIndice = Object.entries(data.products.mappings.properties) 
        console.log(camposIndice)
    })
}

Notem no exemplo básico acima que na variável camposIndice o "products" poderá ser um valor que pretendo determinar na hora, então deve ser mudado dinamicamente conforme o nome do indice que irei indicar, há um meio de fazer esta substituição? tentei colocar um variavel, mas como se espera um objeto ali então não aceita.

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
1 resposta
solução!

Não sei se compreendi exatamente o que deseja, mas talvez a solução seja algo como:

Objects.entries(data['nome_do_indice_recebido_aqui'].mappings.properties) 

Utilizando "products" como valor, teriamos:

let nome_do_indice = 'products';
const camposIndice = Object.entries(data[nome_do_indice].mappings.properties);

Isso funcionaria pois é possível acessar uma propriedade de um objeto javascript com a seguinte notação:

objeto['propriedade']