Я использую API, который возвращает этот объект:
{
"0155894402285712": { "type": "GBUserFieldText", "value": "A0242", "name": "Codice+tessera" },
"0155894402283800": { "type": "GBUserFieldText", "value": "LZZMRN55L53C003Z", "name": "Codice+Fiscale" }
}
Мне нужно извлечь значение A0242 и LZZMRN55L53C003Z, но единственное, что я знаю, это имя «Codice+tessera» и «Codice+fiscale». Как я могу прочитать эти значения? Может мой вопрос глупый, но правда я сегодня схожу с ума...
Спасибо
да адига, извините если не понятно
Вы можете использовать Объект.значения, а затем получить доступ к значению ключа value
let obj = {
"0155894402285712": { "type": "GBUserFieldText", "value": "A0242", "name": "Codice+tessera" },
"0155894402283800": { "type": "GBUserFieldText", "value": "LZZMRN55L53C003Z", "name": "Codice+Fiscale" }
}
Object.values(obj).forEach(({value})=>{
console.info(value)
})
Вы можете использовать Object.values
для преобразования объекта в массив. Используйте map
, чтобы зациклиться и получить value
var obj = {"0155894402285712":{"type":"GBUserFieldText","value":"A0242","name":"Codice+tessera"},"0155894402283800":{"type":"GBUserFieldText","value":"LZZMRN55L53C003Z","name":"Codice+Fiscale"}}
var resut = Object.values(obj).map(o => o.value);
console.info(resut);
Если вы хотите сопоставить имя и значение, вы можете использовать reduce
var obj = {"0155894402285712":{"type":"GBUserFieldText","value":"A0242","name":"Codice+tessera"},"0155894402283800":{"type":"GBUserFieldText","value":"LZZMRN55L53C003Z","name":"Codice+Fiscale"}}
var resut = Object.values(obj).reduce((c, v) => Object.assign(c, {[v.name]: v.value}), {});
console.info(resut);
Если вы хотите найти A0242
из имеющегося у вас значения «Codice + tessera», вам нужно что-то отличное от других ответов:
var data = {
"0155894402285712": { "type": "GBUserFieldText", "value": "A0242", "name": "Codice+tessera" },
"0155894402283800": { "type": "GBUserFieldText", "value": "LZZMRN55L53C003Z", "name": "Codice+Fiscale" }
}
const values = ["Codice+tessera", "Codice+fiscale"]
const results = values.map(v => Object.values(data).find(datum => datum.name === v)).map(v => v.value)
console.info(results) // [ "A0242", "LZZMRN55L53C003Z" ]
Вы можете попробовать это:
const data = {
"0155894402285712": {
"type": "GBUserFieldText",
"value": "A0242",
"name": "Codice+tessera"
},
"0155894402283800": {
"type": "GBUserFieldText",
"value": "LZZMRN55L53C003Z",
"name": "Codice+Fiscale"
}
};
// get an array of all the values of this data.
const arrayOfValues = Object.values(data);
// filter this array in order to find the one which the name you want
const selectedObj = arrayOfValues.find(obj => obj.name === 'Codice+tessera');
// get the value of this object.
const selectedValue = selectedObj.value;
console.info(selectedValue);
// You can also make a function findValueOf(name):
const findValueOf = name =>
arrayOfValues.find(obj => obj.name === name) &&
arrayOfValues.find(obj => obj.name === name).value;
// and use it for example:
console.info(findValueOf('Codice+tessera')); // "A0242"
console.info(findValueOf('Codice+Fiscale')); // "LZZMRN55L53C003Z"
использование find дважды не является хорошей практикой, вы можете лучше сохранить результат как некоторую переменную, а затем получить доступ к свойству value
или вы можете использовать значение по умолчанию ( arrayOfValues.find(obj => obj.name === name) || {} ).value
Неясно. Хотите получить
value
на основеname
?