It should happen just once, that's for sure (I mean once for every result). For sure you don't want to change their ID during the runtime.    Also, if possible, I'd defer the conversion only when needed. So that you only make the conversion only for results that are now required. There's no point in converting 4k strings if you display just 10 of them...    So I'm fine with adding a new prop once, or keeping a separate dictionary in memory with converted entries.