Skip to content

Instantly share code, notes, and snippets.

@Woodsphreaker
Last active March 23, 2017 03:23
Show Gist options
  • Save Woodsphreaker/6c5b4247fbc2fb8df19a7b998033c175 to your computer and use it in GitHub Desktop.
Save Woodsphreaker/6c5b4247fbc2fb8df19a7b998033c175 to your computer and use it in GitHub Desktop.
reduceAllKeysObject

Recuperar todas as chaves do objeto

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"]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment