2015-09-12 14 views
6

Hôm nay, tôi đã xem qua một SO question để thay thế một đối tượng phù hợp bên trong mảng đối tượng.Javascript: thay thế trực tiếp bằng chỉ mục vs Array.splice()

Để làm như vậy, họ đang tìm chỉ mục của đối tượng phù hợp bên trong mảng đối tượng sử dụng lodash.

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

Bây giờ họ đã sử dụng mối nối() để thay thế như thế này,

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

nhưng tại sao không,

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

Bây giờ câu hỏi của tôi là, Có lý do nào đó, không làm như vậy hoặc sử dụng splice()?

Vì việc sử dụng array[index] = 'something'; rất đơn giản. Phải không?

+0

Đúng là sử dụng 'mảng [index]' nhanh hơn 'Array.splice()': http://jsperf.com/array-index-vs-splice. Nhưng mileage của bạn có thể khác nhau tùy thuộc vào kích thước của mảng, có lẽ? – Terry

+1

Trừ khi bạn muốn nhận được giá trị đã xóa (không được thực hiện ở đây), việc chỉ định chỉ mục sẽ có ý nghĩa hơn và có khả năng nhanh hơn. –

+1

Ah, một sự khác biệt là '.splice()' sẽ hoạt động giống '.push()' nếu 'idx' vượt quá' .length' của mảng, trong khi chỉ mục chỉ định sẽ mở rộng chiều dài của mảng. –

Trả lời

2

Lý do duy nhất mà họ có thể làm được điều này là:

  1. họ muốn cũng để có được những giá trị trước
  2. họ muốn 'khéo léo' xử lý các trường hợp idx == -1 bằng cách thay thế các yếu tố cuối cùng trong mảng, thay vì đặt nó ở -1, bởi vì mối nối sẽ xử lý các số nguyên âm đặc biệt. (Điều này không có vẻ như nó sẽ phù hợp với việc sử dụng hợp bạn mô tả)

trong hầu hết các trường hợp, arr[i] = "value"; sẽ tốt hơn so với arr.splice(i, 1, "value");

Các vấn đề liên quan