Recupera todas a chaves (keys) do objeto e armazena em um array.
Não importa quantos níveis existem, todas as chaves serão retornadas.
Pode ser útil no dia a dia.
const object = { | |
"attr1": 1, | |
"attr2": 2, | |
"attr3": [ | |
3, 4, 5, [6, 7, 8, [10, 11, [12, 13, 14]]] | |
], | |
"attr4": [{ | |
"subattr4.1": [15, 16, 17, [18, 19, [20]], [{ "subattr4.1.1": "Lorem Ipsum" }, { "subattr4.1.2": "Lorem Ipsum" }]] | |
}], | |
"attr5": [{ | |
"subattr5.1": [21, 22, [23, 24], 25, [26, [27, 28], 29, [30]]], | |
"subattr5.2": [21, 22, [23, 24], 25, [26, [27, 28], 29, [30]], [{ "subattr5.3": "valor2" }, [{ "subattr5.4": "Lorem Ipsum" }]]], | |
"subattr5.3": { | |
"subattr5.3.1": [{ | |
"subattr5.3.2": [{ "subattr5.3.2.1": "Lorem Ipsum" }, { "subattr5.3.2.2": "Lorem Ipsum" }, [{ "subattr5.3.2.2.1": "Lorem Ipsum" }]] | |
}] | |
}, | |
}], | |
"attr6": "valor1", | |
"attr7": [{ | |
"attr7.1": "valor2", | |
"attr7.2": [{ | |
"attr7.2.1": "valor3", | |
"attr7.2.2": [{ | |
"attr7.2.2.1": "valor4", | |
"attr7.2.2.2": { "attr7.2.2.2.1": "valor5", "attr7.2.2.2.2": "valor6" } | |
}] | |
}] | |
}] | |
}; | |
const isObject = obj => typeof obj === "object"; | |
const objectKeys = obj => Object.keys(obj); | |
const filterObjectValues = values => values.length > 1; | |
const concatKeys = (obj, pre, pos) => pre.concat(isObject(obj[pos]) ? [pos].concat(keysList(obj[pos])) : pos); | |
const keysList = obj => objectKeys(obj).reduce((pre, pos) => concatKeys(obj, pre, pos), []).filter(filterObjectValues); | |
console.log(keysList(object)) //["attr1", "attr2", "attr3", "attr4", "subattr4.1", "subattr4.1.1", "subattr4.1.2", "attr5", "subattr5.1", "subattr5.2", "subattr5.3", "subattr5.4", "subattr5.3", "subattr5.3.1", "subattr5.3.2", "subattr5.3.2.1", "subattr5.3.2.2", "subattr5.3.2.2.1", "attr6", "attr7", "attr7.1", "attr7.2", "attr7.2.1", "attr7.2.2", "attr7.2.2.1", "attr7.2.2.2", "attr7.2.2.2.1", "attr7.2.2.2.2"] |