I rather like your syntax compared to the proposed version. It is less concise but must more consistent and parsable:
return match(user, [
[{first: $, middle: $, last: $}, (f, m, l) => f + ' ' + m + ' ' + l],
[{first: $, last: $} , (f, l) => f + ' ' + l],
[_, 'unknown']
]);