* Sorts the values of an object and returns a new object with the sorted values.
* @template Obj - The type of the object.
* @param {Obj} obj - The object whose values are to be sorted.
* @param {boolean} [ascending=true] - Whether to sort the values in ascending order. If false, the values are sorted in descending order.
* @returns {Obj} A new object with the sorted values.
* const objStr = { a: 'z', b: 'y', c: 'x' };
* const sortedObjStrAsc = sortValues(objStr);
* console.log(sortedObjStrAsc); // { c: 'x', b: 'y', a: 'z' }
* const sortedObjStrDesc = sortValues(objStr, false);
* console.log(sortedObjStrDesc); // { a: 'z', b: 'y', c: 'x' }
* const objNum = { a: 3, b: 2, c: 1 };
* const sortedObjNumAsc = sortValues(objNum);
* console.log(sortedObjNumAsc); // { c: 1, b: 2, a: 3 }
* const sortedObjNumDesc = sortValues(objNum, false);
* console.log(sortedObjNumDesc); // { a: 3, b: 2, c: 1 }
export const sortValues = <Obj extends Record<string, number | string>>(
Object.entries(obj).sort(
([, leftValue], [, rightValue]) =>
(typeof leftValue === 'string' && typeof rightValue === 'string'
? leftValue.localeCompare(rightValue)
: -1) * (ascending ? 1 : -1),