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.

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']