Sự khác biệt giữa splicevà là slicegì?
$scope.participantForms.splice(index, 1);
$scope.participantForms.slice(index, 1);
Sự khác biệt giữa splicevà là slicegì?
$scope.participantForms.splice(index, 1);
$scope.participantForms.slice(index, 1);
Câu trả lời:
splice()thay đổi mảng ban đầu trong khi slice()không nhưng cả hai đều trả về đối tượng mảng.
Xem các ví dụ dưới đây:
var array=[1,2,3,4,5];
console.log(array.splice(2));
Điều này sẽ trở lại [3,4,5]. Các mảng ban đầu bị ảnh hưởng dẫn đến arraybị [1,2].
var array=[1,2,3,4,5]
console.log(array.slice(2));
Điều này sẽ trở lại [3,4,5]. Các mảng ban đầu KHÔNG bị ảnh hưởng với kết quả arraylà [1,2,3,4,5].
Dưới đây là fiddle đơn giản xác nhận điều này:
//splice
var array=[1,2,3,4,5];
console.log(array.splice(2));
//slice
var array2=[1,2,3,4,5]
console.log(array2.slice(2));
console.log("----after-----");
console.log(array);
console.log(array2);
arr1 = arr0.slice()
splicenhư một chính phủ lấy thuế từ bạn. Trong khi đó slicelà một anh chàng sao chép-dán.
.splice()là cực kỳ không trực quan, tôi chỉ mất nhiều năm cố gắng tìm hiểu tại sao các tham chiếu đến mảng ban đầu lại quay trở lại undefinedcho đến khi tôi tìm thấy chủ đề này.
Splice và Slice đều là các hàm Javascript Array.
Mối nối vs Lát
Phương thức splice () trả về (các) mục bị loại bỏ trong một mảng và phương thức lát () trả về (các) phần tử được chọn trong một mảng, như là một đối tượng mảng mới.
Phương thức splice () thay đổi mảng ban đầu và phương thức lát () không thay đổi mảng ban đầu.
Phương thức splice () có thể lấy n số lượng đối số và phương thức lát () lấy 2 đối số.
Splice với ví dụ
Luận điểm 1: Chỉ mục, Bắt buộc. Một số nguyên chỉ định tại vị trí cần thêm / xóa các mục, Sử dụng các giá trị âm để chỉ định vị trí từ cuối mảng.
Luận điểm 2: Tùy chọn. Số lượng các mặt hàng sẽ được gỡ bỏ. Nếu được đặt thành 0 (không), sẽ không có mục nào bị xóa. Và nếu không được thông qua, tất cả (các) mục từ chỉ mục được cung cấp sẽ bị xóa.
Luận cứ 3 Vòng n: Tùy chọn. (Các) mục mới sẽ được thêm vào mảng.
var array=[1,2,3,4,5];
console.log(array.splice(2));
// shows [3, 4, 5], returned removed item(s) as a new array object.
console.log(array);
// shows [1, 2], original array altered.
var array2=[6,7,8,9,0];
console.log(array2.splice(2,1));
// shows [8]
console.log(array2.splice(2,0));
//shows [] , as no item(s) removed.
console.log(array2);
// shows [6,7,9,0]
Lát với ví dụ
Luận điểm 1: Bắt buộc. Một số nguyên chỉ định nơi bắt đầu lựa chọn (Phần tử đầu tiên có chỉ số là 0). Sử dụng số âm để chọn từ cuối mảng.
Luận điểm 2: Tùy chọn. Một số nguyên chỉ định nơi kết thúc lựa chọn nhưng không bao gồm. Nếu được bỏ qua, tất cả các phần tử từ vị trí bắt đầu và đến cuối mảng sẽ được chọn. Sử dụng số âm để chọn từ cuối mảng.
var array=[1,2,3,4,5]
console.log(array.slice(2));
// shows [3, 4, 5], returned selected element(s).
console.log(array.slice(-2));
// shows [4, 5], returned selected element(s).
console.log(array);
// shows [1, 2, 3, 4, 5], original array remains intact.
var array2=[6,7,8,9,0];
console.log(array2.slice(2,4));
// shows [8, 9]
console.log(array2.slice(-2,4));
// shows [9]
console.log(array2.slice(-3,-1));
// shows [8, 9]
console.log(array2);
// shows [6, 7, 8, 9, 0]
splice(x,y), trong slice(x,y)đối số thứ hai ykhông được tính từ vị trí của x, mà từ phần tử đầu tiên của mảng.
array.slice(index, count), nếu bạn sử dụng array.slice((index, count)), bạn sẽ nhận được phần còn lại sau khi 'cắt lát'. Thử nó!
Phương thức lát () trả về một bản sao của một phần của mảng thành một đối tượng mảng mới.
$scope.participantForms.slice(index, 1);
Điều này KHÔNG thay đổi participantFormsmảng nhưng trả về một mảng mới chứa phần tử đơn được tìm thấy tại indexvị trí trong mảng ban đầu.
Phương thức splice () thay đổi nội dung của một mảng bằng cách loại bỏ các phần tử hiện có và / hoặc thêm các phần tử mới.
$scope.participantForms.splice(index, 1);
Điều này sẽ loại bỏ một phần tử khỏi participantFormsmảng tại indexvị trí.
Đây là các hàm riêng của Javascript, AngularJS không liên quan gì đến chúng.
splicesố thứ 2 là số phần tử trong mảng trả về, nhưng đối với đối slicesố thứ 2 là chỉ số của phần tử cuối cùng trả về + 1. slice(index,1)không nhất thiết phải trả về một mảng của một phần tử bắt đầu từ index. [1,2,3,4,5].slice(0,1)trả về [1]nhưng [1,2,3,4,5].slice(3,1)trả về []vì 1được hiểu là như final index +1vậy final index = 0nhưng đây là trước khi start index = 3mảng trống được trả về.
Đây là một mẹo đơn giản để ghi nhớ sự khác biệt giữa slicevssplice
var a=['j','u','r','g','e','n'];
// array.slice(startIndex, endIndex)
a.slice(2,3);
// => ["r"]
//array.splice(startIndex, deleteCount)
a.splice(2,3);
// => ["r","g","e"]
Trick to remember:
Hãy suy nghĩ "spl" (first 3 letters of splice)ngắn gọn về "độ dài cụ thể", rằng đối số thứ hai phải là độ dài không phải là một chỉ mục
Cú pháp
array.splice(start[, deleteCount[, item1[, item2[, ...]]]])
Thông số
start: cần thiết. Chỉ số ban đầu. startlà âm, nó được xử lý "Math.max((array.length + start), 0)"theo thông số kỹ thuật (ví dụ được cung cấp dưới đây) một cách hiệu quả từ cuối array.deleteCount: không bắt buộc. Số phần tử được loại bỏ (tất cả từ startnếu không được cung cấp).item1, item2, ...: không bắt buộc. Các yếu tố được thêm vào mảng từ startchỉ mục.Trả về : Một mảng có các phần tử bị xóa (mảng trống nếu không xóa)
Đột biến mảng ban đầu : Có
const array = [1,2,3,4,5];
// Remove first element
console.log('Elements deleted:', array.splice(0, 1), 'mutated array:', array);
// Elements deleted: [ 1 ] mutated array: [ 2, 3, 4, 5 ]
// array = [ 2, 3, 4, 5]
// Remove last element (start -> array.length+start = 3)
console.log('Elements deleted:', array.splice(-1, 1), 'mutated array:', array);
// Elements deleted: [ 5 ] mutated array: [ 2, 3, 4 ]
Thêm ví dụ trong ví dụ MDN Splice
Thông số cú pháp
array.slice([begin[, end]])
begin: không bắt buộc. Chỉ số ban đầu (mặc định 0). beginlà âm, nó được xử lý "Math.max((array.length + begin), 0)"theo thông số kỹ thuật (ví dụ được cung cấp dưới đây) một cách hiệu quả từ cuối array.end: không bắt buộc. Chỉ mục cuối cùng để trích xuất nhưng không bao gồm (mảng mặc định.length). Nếu endlà âm, nó được xử lý "Math.max((array.length + begin),0)"theo thông số kỹ thuật (ví dụ được cung cấp dưới đây) một cách hiệu quả từ cuối array.Trả về : Một mảng chứa các phần tử được trích xuất.
Bản gốc đột biến : Không
const array = [1,2,3,4,5];
// Extract first element
console.log('Elements extracted:', array.slice(0, 1), 'array:', array);
// Elements extracted: [ 1 ] array: [ 1, 2, 3, 4, 5 ]
// Extract last element (start -> array.length+start = 4)
console.log('Elements extracted:', array.slice(-1), 'array:', array);
// Elements extracted: [ 5 ] array: [ 1, 2, 3, 4, 5 ]
Các ví dụ khác trong các ví dụ về MDN Slice
Đừng coi đây là sự thật tuyệt đối vì tùy thuộc vào từng kịch bản, người ta có thể thực hiện hơn kịch bản khác.
Kiểm tra hiệu suất
Splice và Slice là các lệnh Javascript tích hợp - không cụ thể là các lệnh AngularJS. Slice trả về các phần tử mảng từ "bắt đầu" cho đến trước khi chỉ định "kết thúc". Splice làm thay đổi mảng thực tế và bắt đầu từ "bắt đầu" và giữ số lượng phần tử được chỉ định. Google có rất nhiều thông tin về điều này, chỉ cần tìm kiếm.
Các splice()phương thức trả về các mục gỡ bỏ trong một mảng. Các slice()phương pháp lợi nhuận là yếu tố được lựa chọn (s) trong một mảng, như một đối tượng mảng mới.
Các splice()phương pháp làm thay đổi mảng gốc và slice()phương pháp không làm thay đổi mảng gốc.
Splice() phương thức có thể lấy n số đối số:
Luận điểm 1: Chỉ mục, Bắt buộc.
Luận điểm 2: Tùy chọn. Số lượng các mặt hàng sẽ được gỡ bỏ. Nếu được đặt thành 0 (không), sẽ không có mục nào bị xóa. Và nếu không được thông qua, tất cả (các) mục từ chỉ mục được cung cấp sẽ bị xóa.
Luận điểm 3..n: Tùy chọn. (Các) mục mới sẽ được thêm vào mảng.
slice() phương thức có thể lấy 2 đối số:
Luận điểm 1: Bắt buộc. Một số nguyên chỉ định nơi bắt đầu lựa chọn (Phần tử đầu tiên có chỉ số là 0). Sử dụng số âm để chọn từ cuối mảng.
Luận điểm 2: Tùy chọn. Một số nguyên chỉ định nơi kết thúc lựa chọn. Nếu được bỏ qua, tất cả các phần tử từ vị trí bắt đầu và đến cuối mảng sẽ được chọn. Sử dụng số âm để chọn từ cuối mảng.
chỉ số = 2
//splice & will modify the origin array
const arr1 = [1,2,3,4,5];
//slice & won't modify the origin array
const arr2 = [1,2,3,4,5]
console.log("----before-----");
console.log(arr1.splice(2, 1));
console.log(arr2.slice(2, 1));
console.log("----after-----");
console.log(arr1);
console.log(arr2);
let log = console.log;
//splice & will modify the origin array
const arr1 = [1,2,3,4,5];
//slice & won't modify the origin array
const arr2 = [1,2,3,4,5]
log("----before-----");
log(arr1.splice(2, 1));
log(arr2.slice(2, 1));
log("----after-----");
log(arr1);
log(arr2);
Một vi dụ khac:
[2,4,8].splice(1, 2) -> returns [4, 8], original array is [2]
[2,4,8].slice(1, 2) -> returns 4, original array is [2,4,8]
lát cắt không thay đổi mảng ban đầu, nó trả về mảng mới nhưng mối nối thay đổi mảng ban đầu.
example: var arr = [1,2,3,4,5,6,7,8];
arr.slice(1,3); // output [2,3] and original array remain same.
arr.splice(1,3); // output [2,3,4] and original array changed to [1,5,6,7,8].
đối số thứ hai của phương thức splice khác với phương thức lát. đối số thứ hai trong mối nối đại diện cho số lượng phần tử cần loại bỏ và trong lát cắt nó đại diện cho chỉ mục kết thúc.
arr.splice(-3,-1); // output [] second argument value should be greater then
0.
arr.splice(-3,-1); // output [6,7] index in minus represent start from last.
-1 đại diện cho phần tử cuối cùng để nó bắt đầu từ -3 đến -1. Trên đây là sự khác biệt lớn giữa phương pháp mối nối và lát cắt.
//splice
var array=[1,2,3,4,5];
console.log(array.splice(2));
//slice
var array2=[1,2,3,4,5]
console.log(array2.slice(2));
console.log("----after-----");
console.log(array);
console.log(array2);
Sự khác biệt giữa các hàm xây dựng javascript Slice () và Splice () là, Slice trả về mục đã xóa nhưng không thay đổi mảng ban đầu; giống,
// (original Array)
let array=[1,2,3,4,5]
let index= array.indexOf(4)
// index=3
let result=array.slice(index)
// result=4
// after slicing=> array =[1,2,3,4,5] (same as original array)
nhưng trong trường hợp splice () nó ảnh hưởng đến mảng ban đầu; giống,
// (original Array)
let array=[1,2,3,4,5]
let index= array.indexOf(4)
// index=3
let result=array.splice(index)
// result=4
// after splicing array =[1,2,3,5] (splicing affects original array)
Ví dụ về JavaScript Array splice ()
Ví dụ1 bởi tutsmake - Xóa 2 phần tử khỏi chỉ mục 1
var arr = [ "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten" ];
arr.splice(1,2);
console.log( arr );
Ví dụ-2 Bằng tutsmake - Thêm phần tử mới từ chỉ mục 0 JavaScript
var arr = [ "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten" ];
arr.splice(0,0,"zero");
console.log( arr );
Ví dụ-3 bởi tutsmake - Thêm và xóa các thành phần trong mảng JavaScript
var months = ['Jan', 'March', 'April', 'June'];
months.splice(1, 0, 'Feb'); // add at index 1
console.log(months);
months.splice(4, 1, 'May'); // replaces 1 element at index 4
console.log(months);
https://www.tutsmake.com/javascript-array-splice-method-by-example/