Я работаю с ответом от API, который выглядит так:

res: {
  result: { _text: 'NOK' },
    cod: { _text: 'F09' },
    items: { 
      car: { _text: 'f16' }, 
      plane: { _text: 'f11' }
    }
}

С этим ответом неудобно работать, потому что я должен сделать результат._текст

Я хочу преобразовать ответ во что-то вроде этого:

res: {
  result: 'NOK',
    cod: 'F09',
    items: { 
      car: 'f16', 
      plane: 'f11' }
    }
}
0
Emilio José Pérez Mariscal 4 Фев 2022 в 14:33
Это обязательно менять?
 – 
codingmaster398
4 Фев 2022 в 14:37

2 ответа

Вы можете просто получить все данные, как упоминал Cypherjac, но если вы действительно хотите преобразовать ответ, вы можете сделать что-то вроде этого.

const res = {
    result: { _text: 'NOK' },
  cod: { _text: 'F09' },
  items: { car: { _text: "f16" }, plane: { _text: "f11" }}
  }
  
Object.keys(res).forEach((el) => {
    if (Object.keys(res[el]).length>1){ //or check if el === 'items'
    Object.keys(res[el]).forEach((item) => {
        res[el][item] = Object.values(res[el][item])[0]
    })
  }
  else{
    res[el] = Object.values(res[el])[0]
  }
    
})

console.log(res)

console.log(res.result)
console.log(res.cod)
console.log(res.items.car)
.as-console-wrapper { max-height: 100% !important; top: 0; }
1
cmgchess 4 Фев 2022 в 15:05
Да, это правильно, если данные должны быть полностью преобразованы
 – 
Cypherjac
4 Фев 2022 в 15:21

Есть ли у вас контроль над данными, возвращаемыми API?

Если нет, то это более явный способ доступа к значениям без необходимости знать имена ключей.

// Assuming data is the fetched response from the api
let data = {
    result: { _text: 'NOK' },
    cod: { _text: 'F09' },
    items: {
        car: { _text: "f16" },
        plane: { _text: "f11" }
    }
}
// This function gets the values of the object you've provided
function getVal(val){return Object.values(val)[0]};
// Object.values returns an array
// So we access the first value since the data has only one key '_text'
console.log(getVal(data.result));
console.log(getVal(data.cod));
console.log(getVal(data.items.car));
console.log(getVal(data.items.plane));

Это в основном полезно, если вы не уверены в имени возвращаемого ключа.

0
Cypherjac 4 Фев 2022 в 14:50
Имя ключа всегда будет "_text"
 – 
Emilio José Pérez Mariscal
4 Фев 2022 в 15:00
Да, это работает в обоих направлениях, но этот фрагмент более богат, потому что он не предполагает и более гибок.
 – 
Cypherjac
4 Фев 2022 в 15:18