Из значений объекта brands
, .find
того, чей объект имеет значение, совпадающее с requestedBrand
, и, если оно существует, визуализируют объект:
app.get('/pages/:brandId', (req, res) => {
let requestedBrand = req.params.pageId;
console.log(requestedBrand) // might return "OSX" but I want it to become "Apple"
let brands = JSON.parse(fs.readFileSync(__dirname + '/views/data/brands.json'));
const obj = Object.values(brands).find(brand => Object.values(brand).includes(requestedBrand));
if (obj) {
res.render('pages/brand', {
brand: obj
});
} else {
// no object found
}
})
Живой фрагмент:
const brands = {
"Apple": {
"ceo": "Steve Jobs",
"os": "OSX"
},
"Microsoft": {
"ceo": "Bill Gates",
"os": "Windows"
}
};
const requestedBrand = prompt('Brand?');
const obj = Object.values(brands).find(brand => Object.values(brand).includes(requestedBrand));
if (obj) {
console.log(obj);
} else {
console.log('no match');
}
Это только дает вам цель для бренда, потому что, похоже, это все, что вы хотите для brand: brands[requestedBrand]
- кажется, вы не на самом деле нужен ключ, связанный с ним. Если вам нужен ключ, итерируйте Object.entries
вместо Object.values
:
const brands = {
"Apple": {
"ceo": "Steve Jobs",
"os": "OSX"
},
"Microsoft": {
"ceo": "Bill Gates",
"os": "Windows"
}
};
const requestedBrand = prompt('Brand?');
const entry = Object.entries(brands).find(([, brand]) => Object.values(brand).includes(requestedBrand));
if (entry) {
// entry[1] is the object
console.log(entry[0], entry[1]);
} else {
console.log('no match');
}
Возможно, вы захотите выполнить поиск без учета регистра:
const lowerBrand = requestedBrand;
const entry = Object.entries(brands).find(([, brand]) => (
Object.values(brand).map(str => str.toLowerCase()).includes(lowerBrand)
));