Почему такой результат?
Свойство объекта может быть только стрингом, поэтому b, перед тем как стать ключем приводится к строке 
https://jsfiddle.net/u69v10tb/
Вам нужно использовать Map https://developer.mozilla.org/en-US/docs/Web/JavaS...
https://jsfiddle.net/m1hxpbp5/
Нужно брать не объект а значение объекта:a[b.key] = 12;