Poniższy kod pochodzi z autouzupełniania interfejsu użytkownika jQuery:
var projects = [
{
value: "jquery",
label: "jQuery",
desc: "the write less, do more, JavaScript library",
icon: "jquery_32x32.png"
},
{
value: "jquery-ui",
label: "jQuery UI",
desc: "the official user interface library for jQuery",
icon: "jqueryui_32x32.png"
},
{
value: "sizzlejs",
label: "Sizzle JS",
desc: "a pure-JavaScript CSS selector engine",
icon: "sizzlejs_32x32.png"
}
];
Na przykład chcę zmienić wartość desc jquery-ui . Jak mogę to zrobić?
Ponadto, czy istnieje szybszy sposób na uzyskanie danych? Mam na myśli nadać obiektowi nazwę, by pobierał jego dane, tak jak obiekt w tablicy? To by było coś w rodzajujquery-ui.jquery-ui.desc = ....
javascript
jquery
arrays
qinHaiXiang
źródło
źródło
projects["jquery-ui"].desc
. Czy to byłoby warte wysiłku, aby uzyskać lepszą składnię?Odpowiedzi:
Musisz wyszukać w tablicy, np .:
i używaj go jak
AKTUALIZACJA:
Aby uzyskać to szybciej:
(Zgodnie z komentarzem Frédérica nie należy używać łącznika w kluczu obiektu lub należy użyć notacji „jquery-ui” i notacji [jquery-ui]).)
źródło
-
w nazwie obiektu. Trzeba by napisać"jquery-ui": {}
iprojects["jquery-ui"].desc
odpowiednio.To jest dość proste
findIndex
metody.yourArray[indexThatyouFind]
źródło
()
nafindIndex
metody?[...myArray.slice(0, objIndex), Object.assign({}, myArray[objIndex], myArray.slice(objIndex + 1))]
[...myArray.slice(0, objIndex), Object.assign({}, myArray[objIndex], ...myArray.slice(objIndex + 1))]
? Myślę, że brakuje ci drugiej elipsy.Sposób ES6 , bez mutowania oryginalnych danych.
źródło
Najlepsze rozwiązanie dzięki ES6.
Zwraca nową tablicę z zastąpionym opisem dla obiektu, który zawiera wartość równą „jquery-ui”.
źródło
Możesz użyć $ .each () do iteracji po tablicy i zlokalizowania interesującego Cię obiektu:
źródło
Korzystanie z mapy jest najlepszym rozwiązaniem bez użycia dodatkowych bibliotek. (Przy użyciu ES6)
źródło
Można to łatwo osiągnąć za pomocą biblioteki podkreślenia / lodash:
Dokumenty:
https://lodash.com/docs#find
https://lodash.com/docs#merge
źródło
.value()
możesz użyć .find w swoim przykładzie
źródło
musisz znać indeks zmienianego obiektu. to jest całkiem proste
źródło
Myślę, że ten sposób jest lepszy
źródło
findIndex
przypisujesz wartość zamiast porównywaćbiorąc pod uwagę następujące dane, chcemy zastąpić jagody na
summerFruits
liście arbuzem .Możesz to zrobić na dwa sposoby.
Pierwsze podejście:
Drugie podejście: użycie
map
ispread
:summerFruitsCopy
lista zwróci teraz tablicę ze zaktualizowanym obiektem.źródło
źródło
...
zanim projekty są konieczne?...
jest znany jako operator rozprzestrzeniania. google it :)To kolejna odpowiedź
find
. Opiera się to na tym, żefind
:Oto krytyczny fragment kodu JavaScript:
Oto alternatywna wersja tego samego Javascript:
Oto jeszcze krótsza (i nieco bardziej zła wersja):
Oto pełna działająca wersja:
źródło
Możesz użyć funkcji mapy -
źródło
Wypróbuj ten kod. używa funkcji jQuery grep
źródło
Możemy również użyć funkcji mapy Array do modyfikacji obiektu tablicy za pomocą Javascript.
źródło
Najpierw znajdź indeks:
Następnie:
Następnie rób, co chcesz z tym indeksem, na przykład:
$ scope [returnindex] .someKey = "someValue";
Uwaga: nie używaj dla, ponieważ for sprawdzi wszystkie dokumenty tablicy, użyj podczas gdy z ogranicznikiem, więc zatrzyma się po znalezieniu, a tym samym szybszym kodzie.
źródło
Tutaj używam kątowego js. W javascript możesz użyć pętli do znalezienia.
źródło
aby zaktualizować wiele przedmiotów za pomocą dopasowań użyj:
źródło
To moja odpowiedź na problem. Moja wersja podkreślenia to 1.7, więc nie mogłem jej używać
.findIndex
.Więc ręcznie zdobyłem indeks przedmiotu i go wymieniłem. Oto kod tego samego.
Poniższa metoda zastąpi ucznia
id:4
większą liczbą atrybutów w obiekcie}
Z podkreśleniem 1.8 zostanie uproszczone, ponieważ mamy metody
_.findIndexOf
.źródło
Pozwól, że chcesz zaktualizować wartość
array[2] = "data"
źródło
źródło