Więc mam tablicę obiektów tak:Aktualizacja jeśli istnieje, lub dodać nowy element do tablicy obiektów - elegancki sposób w javascript + lodash
var arr = [
{uid: 1, name: "bla", description: "cucu"},
{uid: 2, name: "smth else", description: "cucarecu"},
]
uid
jest unikalny identyfikator obiektu w tej tablicy. Szukam eleganckiego sposobu modyfikacji obiektu, jeśli mamy obiekt z danym uid,
lub dodać nowy element, jeśli prezentowany uid
nie istnieje w tablicy. Wyobrażam sobie, że funkcja będzie zachowywać się tak w js konsoli:
> 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"}
]
Mój obecny sposób nie wydaje się być bardzo elegancki i funkcjonalny:
function addOrReplace (arr, object) {
var index = _.findIndex(arr, {'uid' : object.uid});
if (-1 === index) {
arr.push(object);
} else {
arr[index] = object;
}
}
Używam lodash, więc jestem myślenie o zmodyfikowanej wersji _.union
z niestandardowym sprawdzaniem równości.
tak, też podoba mi się ta struktura, ale niektóre biblioteki których używam nie Wspieraj to. Podobnie jak [Angular typeahead] (https://github.com/angular-ui/bootstrap/tree/master/src/typeahead), który może przechodzić tylko przez tablice. – ganqqwerty
Możesz użyć tej struktury tylko jako indeksu. W ten sposób uzyskujesz szybkie wyszukiwanie i potrzebna jest dodatkowa tablica dla takich elementów, jak tablica. – friedi