var a = {
	a: { param1: 1,   param2: 22,  param3: 3   },
	b: { param1: 11,  param2: 2,   param3: 33  },
	c: { param1: 111, param2: 222, param3: 333 }
};
// ключи оригинального объекта
alert(Object.entries(a).map(([key]) => key).join(" > "));
// создадим отсортированный объект
var aSorted = Object.entries(a)
	.sort(([, a], [, b]) => a.param2 > b.param2 ? 1 : -1)
	.reduce((m, [k, v]) => ({ ...m, [k]: v }), {})
// ключи отсортированного объекта
alert(Object.entries(aSorted).map(([key]) => key).join(" > "));
Ключи объекта не должны быть строками, которые могут быть приведены к целочисленному индексу (
ecma-international.org/ecma-262/9.0/)
	
	| Сообщение от AntonMs | 
	| На данный момент задача именно такая. Вот к примеру объект, если его перебирать то сначала будет "а". А нужно что-бы b > a > c. | 
	
 В том примере вы ничего не перебираете!
var a = {
	b: { param1: 11,  param2: 2,   param3: 33  },
	a: { param1: 1,   param2: 22,  param3: 3   },
	c: { param1: 111, param2: 222, param3: 333 }
};
for(const [key, value] of Object.entries(a)) {
	alert(key);
}