2015-09-12 9 views
6

Dziś natknąłem się na SO question, aby zastąpić pasujący obiekt wewnątrz tablicy obiektów.Javascript: zastąpienie bezpośrednio indeksem vs Array.splice()

Aby to zrobić, znajdują indeksy pasującego obiektu wewnątrz tablicy obiektów przy użyciu lodash.

var users = [{user: "Kamal"}, {user: "Vivek"}, {user: "Guna"}] 
var idx = _.findIndex(users, {user: "Vivek"}); // returns 1 

Teraz używali splice(), aby zastąpić tak,

users.splice(idx, 1, {user: "Gowtham"}) 

ale dlaczego nie,

users[idx] = {user: "Gowtham"}; 

Teraz moje pytanie brzmi, czy istnieje jakikolwiek powód, aby tego nie robić lub użyć splice()?

Ponieważ jest tak prosty w użyciu array[index] = 'something';. Czyż nie?

+0

Prawdą jest, że za pomocą 'tablica [indeks] jest szybszy niż' 'Array.splice()': http://jsperf.com/array-index-vs-splice. Ale czy twój przebieg może się różnić w zależności od wielkości tablicy? – Terry

+1

Jeśli nie chcesz uzyskać usuniętej wartości (co nie jest tutaj wykonywane), przypisanie indeksu będzie bardziej sensowne i najprawdopodobniej będzie szybsze. –

+1

Ah, jedną różnicą jest to, że '.splice()' będzie działać bardziej jak '.push()' jeśli 'idx' jest poza' .length' tablicy, podczas gdy indeksowanie może wydłużyć długość tablicy. –

Odpowiedz

2

Jedyne powody mogą to zrobić to:

  1. chcą również uzyskać poprzednią wartość
  2. chcą „sprytnie” obsłużyć przypadek, gdy idx == -1 zastępując ostatni element w tablicy, zamiast umieszczać ją na -1, ponieważ splice będą traktować negatywnie liczby całkowite specjalnie. (To nie wydaje się, że będzie pasować do przypadków użycia opisałeś)

w większości przypadków arr[i] = "value"; będzie lepsza niż arr.splice(i, 1, "value");

Powiązane problemy