Mise à jour si elle existe ou ajouter un nouvel élément à un tableau d'objets de manière élégante en javascript + lodash

J'ai donc un tableau d'objets comme ça:

var arr = [
  {uid: 1, name: "bla", description: "cucu"},
  {uid: 2, name: "smth else", description: "cucarecu"},
]

uid est l'identifiant unique de l'objet dans ce tableau. Je suis à la recherche de la manière élégante de modifier l'objet, si nous avons l'objet de la uid, ou ajouter un nouvel élément, si l'présenté uid n'existe pas dans le tableau. J'imagine que la fonction à se comporter comme ça en js console:

> addOrReplace(arr, {uid: 1, name: 'changed name', description: "changed description"})
> arr
[
  {uid: 1, name: "bla", description: "cucu"},
  {uid: 2, name: "smth else", description: "cucarecu"},
]
> addOrReplace(arr, {uid: 3, name: 'new element name name', description: "cocoroco"})
> arr
[
  {uid: 1, name: "bla", description: "cucu"},
  {uid: 2, name: "smth else", description: "cucarecu"},
  {uid: 3, name: 'new element name name', description: "cocoroco"}
]

Ma façon actuelle ne semble pas être très élégant et fonctionnel:

function addOrReplace (arr, object) {
  var index = _.findIndex(arr, {'uid' : object.uid});
  if (-1 === index) {
    arr.push(object);
  } else {
    arr[index] = object;
  }
} 

Je suis en utilisant lodash, donc je pensais à quelque chose comme modifié _.union personnalisé pour le contrôle d'égalité.

OriginalL'auteur ganqqwerty | 2014-09-10