Estoy tratando de ordenar un Objeto de
{"key4": {"name":"joe"},"key3": ["aaa", "bbb"],"key5": {"aaa":["name","joe"]}, "key1": "TypeString", "key2": 0}
a
{"key1": "TypeString", "key2": 0, "key3": ["aaa","bbb"], "key4": {"name":"joe"},"key5": {"aaa":["name","joe"]}}
mi objetivo principal es ordenar por el tipo de valor y no por el valor en sí mismo... es decir, cada valor con el tipo de cadena viene primero, seguido de int, luego las matrices y el objeto final.
Cuando imprime un objeto, el orden de las claves depende de la implementación. Si realmente necesita obtener las claves en orden de inserción, puede usar Reflect.ownKeys() (para más detalles, consulte MDN ):
const obj = {"key4": {"name":"joe"},"key3": ["aaa", "bbb"],"key5": {"aaa":["name","joe"]}, "key1": "TypeString", "key2": 0}; const keys = Object.keys(obj); const keysSorted = keys.sort((key1, key2) => getTypeSortId(obj[key1]) - getTypeSortId(obj[key2])); const objSorted = keysSorted.reduce((o, key) => (o[key] = obj[key], o), {}); console.log(objSorted); console.log(Reflect.ownKeys(objSorted)); function getTypeSortId(value) { return ( typeof value === "string" ? 1 : typeof value === "number" ? 2 : value instanceof Array ? 3 : typeof value === "object" ? 4 : 5 ); }