如果您知道其中一个属性值,如何在嵌套对象上获取对象键?
How to get an object key on a nested object if you know one of its properties values?
我有一个这样的对象:
const CATEGORY_SLUGS = {
CATEGORY_1: { ES: "slug1-in-spanish", UK: "slug1-in-english" },
CATEGORY_2: { ES: "slug2-in-spanish", UK: "slug2-in-english" },
CATEGORY_3: { ES: "slug3-in-spanish", UK: "slug3-in-english" },
}
在我的代码的其他部分,我有 slug
值,并且 country
也是已知的。
从这两个信息中,了解 CATEGORY
的最佳方式是什么?我的意思是,如何找出 slug 指的是哪个类别?
我可以使用 let
变量和某种 for
循环来逐一检查并查看匹配项。但它看起来不太好,我觉得那里有更清洁的解决方案。
您可以使用 Object.entries
和 Array.find
:
const CATEGORY_SLUGS = {
CATEGORY_1: { ES: "slug1-in-spanish", UK: "slug1-in-english" },
CATEGORY_2: { ES: "slug2-in-spanish", UK: "slug2-in-english" },
CATEGORY_3: { ES: "slug3-in-spanish", UK: "slug3-in-english" },
}
const findKey = (country, slug) => {
const entries = Object.entries(CATEGORY_SLUGS)
const pair = entries.find(([_, category]) => category[country] === slug)
return pair ? pair[0] : null
}
// Test case
console.log(findKey('ES', 'slug1-in-spanish'))
console.log(findKey('UK', 'slug2-in-english'))
// Error case
console.log(findKey('ES', 'slug3-in-english'))
只是一个旁注 - 只是因为它看起来更干净并不意味着它更好。可读性优于短代码。
我有一个这样的对象:
const CATEGORY_SLUGS = {
CATEGORY_1: { ES: "slug1-in-spanish", UK: "slug1-in-english" },
CATEGORY_2: { ES: "slug2-in-spanish", UK: "slug2-in-english" },
CATEGORY_3: { ES: "slug3-in-spanish", UK: "slug3-in-english" },
}
在我的代码的其他部分,我有 slug
值,并且 country
也是已知的。
从这两个信息中,了解 CATEGORY
的最佳方式是什么?我的意思是,如何找出 slug 指的是哪个类别?
我可以使用 let
变量和某种 for
循环来逐一检查并查看匹配项。但它看起来不太好,我觉得那里有更清洁的解决方案。
您可以使用 Object.entries
和 Array.find
:
const CATEGORY_SLUGS = {
CATEGORY_1: { ES: "slug1-in-spanish", UK: "slug1-in-english" },
CATEGORY_2: { ES: "slug2-in-spanish", UK: "slug2-in-english" },
CATEGORY_3: { ES: "slug3-in-spanish", UK: "slug3-in-english" },
}
const findKey = (country, slug) => {
const entries = Object.entries(CATEGORY_SLUGS)
const pair = entries.find(([_, category]) => category[country] === slug)
return pair ? pair[0] : null
}
// Test case
console.log(findKey('ES', 'slug1-in-spanish'))
console.log(findKey('UK', 'slug2-in-english'))
// Error case
console.log(findKey('ES', 'slug3-in-english'))
只是一个旁注 - 只是因为它看起来更干净并不意味着它更好。可读性优于短代码。