Поэтому у меня есть массив таких объектов:
var arr = [
{uid: 1, name: "bla", description: "cucu"},
{uid: 2, name: "smth else", description: "cucarecu"},
]
uid
- уникальный идентификатор объекта в этом массиве. Я ищу элегантный способ изменения объекта, если у нас есть объект с данным uid,
или добавлен новый элемент, если представленный uid
не существует в массиве. Я полагаю, что функция должна вести себя так, как в консоли js:
> 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"}
]
Мой нынешний путь не кажется очень элегантным и функциональным:
function addOrReplace (arr, object) {
var index = _.findIndex(arr, {'uid' : object.uid});
if (-1 === index) {
arr.push(object);
} else {
arr[index] = object;
}
}
Я использую lodash, поэтому я думал о чем-то вроде измененного _.union
с пользовательской проверкой равенства.