我需要访问并返回对象中所有深度嵌套的键,并根据键返回它们。
例如我有
const chatSettings = {
name: {
questions: {
question: 'What\'s your name?',
fields: [
{
field: 'textinput',
type: 'text',
key: 'firstname',
label: 'First name'
},
{
field: 'textinput',
type: 'text',
key: 'lastname',
label: 'Last name'
},
]
}
},
email: {
questions: {
question: 'Okay. {{username}}. Now type your email addess',
fields: [
{
field: 'textinput',
type: 'email',
key: 'email',
label: 'Email'
}
]
}
}
}
我需要类似的东西getAllValuesForKey(chatSettings, 'key')
,它会返回['firstname', 'lastname', 'email']
任何想法如何以高性能的方式做到这一点,同时考虑到这些对象中的一些甚至可能没有这个键?
您可以使用reduce
方法创建递归函数并返回数组。
const data = {"name":{"questions":{"question":"What's your name?","fields":[{"field":"textinput","type":"text","key":"firstname","label":"First name"},{"field":"textinput","type":"text","key":"lastname","label":"Last name"}]}},"email":{"questions":{"question":"Okay. {{username}}. Now type your email addess","fields":[{"field":"textinput","type":"email","key":"email","label":"Email"}]}}}
function find_deep(data, key) {
return Object.keys(data).reduce((r, e) => {
if (typeof data[e] == 'object') r.push(...find_deep(data[e], key))
if (key == e) r.push(data[e])
return r
}, [])
}
console.log(find_deep(data, 'key'))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句