2015-09-12 2 views
6

Oggi mi sono imbattuto in uno SO question per sostituire un oggetto corrispondente all'interno di un array di oggetti.Javascript: sostituire direttamente con index vs Array.splice()

Per fare ciò, stanno trovando l'indice dell'oggetto corrispondente all'interno dell'array di oggetti usando lodash.

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

Ora hanno usato splice() per sostituire in questo modo,

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

ma perché non,

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

Ora la mia domanda è, non c'è alcuna ragione, non farlo o usare splice()?

Perché è così semplice da utilizzare array[index] = 'something';. Non è vero?

+0

E 'vero che l'utilizzo di 'array [index]' è più veloce di 'Array.splice()': http://jsperf.com/array-index-vs-splice. Ma il tuo chilometraggio può variare a seconda delle dimensioni dell'array, forse? – Terry

+1

A meno che non si desideri ottenere il valore rimosso (che non viene eseguito qui), l'assegnazione dell'indice sarebbe più sensata e molto probabilmente più veloce. –

+1

Ah, una differenza è che '.splice()' agirà più come '.push()' se 'idx' è al di là del' .length' dell'array, mentre l'assegnazione dell'indice estenderebbe la lunghezza dell'array. –

risposta

2

Le uniche ragioni che potrebbero farlo sono:

  1. vogliono ottenere anche il valore precedente
  2. vogliono 'abilmente' gestire il caso in cui idx == -1 sostituendo l'ultimo elemento nell'array, piuttosto che metterlo a -1, perché lo splice tratterà in modo speciale gli interi negativi. (Questo non sembra come esso si adatterebbe il caso d'uso da te descritto)

nella maggior parte dei casi, arr[i] = "value"; sarà migliore di arr.splice(i, 1, "value");