2015-09-12 3 views
6

Heute stieß ich auf eine SO question, um ein passendes Objekt im Array von Objekten zu ersetzen.Javascript: Ersetzen Sie direkt mit Index vs Array.splice()

Dazu suchen sie den Index des übereinstimmenden Objekts im Array von Objekten mit lodash.

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

Jetzt verwendet sie splice() wie folgt zu ersetzen,

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

aber warum nicht,

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

Nun meine Frage ist, gibt es keinen Grund, dies nicht zu tun oder splice() zu verwenden?

Weil es so einfach zu bedienen ist array[index] = 'something';. Ist es nicht?

+0

Es stimmt, dass mit 'array [index]' ist schneller als 'Array.splice()': http://jsperf.com/array-index-vs-splice. Aber Ihr Kilometerstand kann variieren, abhängig von der Größe des Arrays, vielleicht? – Terry

+1

Wenn Sie den entfernten Wert nicht erhalten möchten (was hier nicht gemacht wird), wäre die Indexzuweisung sinnvoller und wahrscheinlich schneller. –

+1

Ah, ein Unterschied ist, dass '.splice()' mehr wie '.push()' agiert, wenn 'idx' jenseits der' .length' des Arrays liegt, während die Index-Zuweisung die Länge des Arrays erweitern würde. –

Antwort

2

Die einzigen Gründe könnten sie dies tun, sind:

  1. sie wollen auch den vorherigen Wert
  2. sie handhaben ‚geschickt‘, um den Fall zu wollen, erhalten, wo idx == -1 durch das letzte Element ersetzt in dem Array, anstatt es auf -1 zu setzen, weil Spleiß speziell negative ganze Zahlen behandelt. (Dies scheint nicht, wie es würde den Anwendungsfall passen Sie beschrieben)

in den meisten Fällen wird arr[i] = "value"; besser sein als arr.splice(i, 1, "value");