2015-09-12 55 views
6

今天,我遇到了一个SO question来替换对象数组内的匹配对象。Javascript:直接用索引替换vs Array.splice()

为此,他们使用lodash找到对象数组内的匹配对象的索引。

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

现在,他们使用的拼接()来代替这个样子,

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

,但为什么不呢,

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

现在的问题是,是否有任何理由,不这样做或使用splice()

因为它使用起来很简单array[index] = 'something';。不是吗?

+0

这是事实,使用'数组[索引]'快于'Array.splice()':http://jsperf.com/array-index-vs-splice。但是,你的里程可能会有所不同,取决于阵列的大小,也许? – Terry

+1

除非你想获得删除的值(这里没有完成),否则索引分配会更有意义,而且可能更快。 –

+1

啊,一个区别是,如果'idx'超出数组的'.length','.splice()'将更像'.push()',而索引分配会延长数组的长度。 –

回答

2

他们可能这样做的唯一原因是:

  1. 他们也想获得前值
  2. 他们要“巧妙”处理的情况下IDX == -1通过替换最后一个元素在数组中,而不是将它置于-1,因为拼接会专门处理负数整数。 (这似乎并不像它会适合您所描述的用例)
在大多数情况下

arr[i] = "value";将好于arr.splice(i, 1, "value");