12/08/2018, 17:39

mấy "lệnh" xử lí chuỗi mảng mà hay bị nhầm với nhau: Slice vs Splice vs Split, Concat vs Join, Push vs Pop vs Shift vs Unshift

mấy lệnh có cái chữ na ná, mà công dụng cũng (tưởng như) na ná thì phân biệt sao giờ? tiêu chí phân loại slice splice split nghĩa của từ tiếng anh thái ra một lát mỏng (thịt bò) bện (dây thừng) xé (mực khô), chẻ (củi) lấy cái gì có thể 1 array hoặc 1 string, từ giờ trở ...

mấy lệnh có cái chữ na ná, mà công dụng cũng (tưởng như) na ná thì phân biệt sao giờ?

tiêu chí phân loại slice splice split
nghĩa của từ tiếng anh thái ra một lát mỏng (thịt bò) bện (dây thừng) xé (mực khô), chẻ (củi)
lấy cái gì có thể 1 array hoặc 1 string, từ giờ trở đi chỉ nói về 1 array còn string thì tương tự chỉ 1 array chỉ 1 string
sản sinh ra cái gì 1 mảng gồm vài phần tử sao ra từ mảng cũ 1 mảng mới chứa chấp các phần tử bị kickass ra khỏi mảng cũ hoặc 1 mảng rỗng nếu mảng cũ đã ko kickass ai lại còn nạp thêm thành viên 1 mảng gồm những phân tử mà trước đây liền một khối trong string, nay bị chia rẽ nội bộ
số phận array/string ban đầu toàn thây teo lại do kickass vài thằng ra, hoặc phình ra do kết nạp thêm vài thằng vào toàn thây
cú pháp arr.slice(điểm bắt đầu chép,điểm bắt đầu ngừng chép) arr.splice(điểm bắt đầu xóa, số lượng xóa, phần tử muốn chèn 1, phần tử muốn chèn 2,...) arr.split(dấu hiệu để tách, số lượng tách)

slice

lấy ví dụ sau đây, bạn Mòe có 1 array gồm những đặc điểm mô tả về mình:

let moe = ["dangyeu", "chamchi","thomtho"];

Bạn của Mòe tên là Tèo cũng muốn có 1 array mô tả về Tèo nhưng vì Tèo không thích tắm nên chỉ có 2 đặc điểm đầu thôi

let teo = moe.slice(0,2);

câu lệnh này có nghĩa: sao chép cho thằng Tèo một arr giống của Mòe nhưng chỉ gồm các phần tử từ 0 đến phần tử TRƯỚC 2

 console.log(moe)    ["dangyeu","chamchi","thomtho"]
 console.log(teo)          ["dangyeu","chamchi"] 
lưu ý
  • nhắc lại cú pháp là arr.slice(điểm bắt đầu chép,điểm bắt đầu ngừng chép) chứ không phải là arr.slice(điểm bắt đầu chép,điểm cuối cùng chép) đâu nhá
ngoài ra
  • nếu ko nói điểm bắt đầu ngừng chép thì mặc định là chép đến hết thì thôi
  • nếu ko nói điểm bắt đầu chép thì mặc định là chép từ đầu đến cuối
  • slice còn có công dụng hữu ích là gom các thông số (arguments) lại thành chỉ một array thôi, như trong Java không có cái gì để gom argument lại phải tự làm nhọc thấy pà...

cú pháp sơ qua: [].slice.call(arguments);

splice để xóa

Vì thực tế là đứa nào càng chăm chỉ thì càng hay bị sai vặt nên Mòe quyết định xóa phần tự xưng là chăm chỉ đi. Mòe dùng splice đẻ xóa

let dacdiembiloaibo = moe.splice(1,1);
 console.log(moe)     ["dangyeu","thomtho"] 
 console.log(dacdiembiloaibo)    ["chamchi"]
Lưu ý
  • lưu ý cú pháp là splice(điểm bắt đầu xóa, số lượng cần xóa) chứ không phải là (điểm bắt đầu xóa,điểm cuối cùng xóa) cũng không phải là (điểm bắt đầu xóa, điểm bắt đầu ngừng xóa) đâu nha
  • giá trị trả về ko phải là những đặc điểm còn lại của Mòe, cũng không phải những đặc điểm ban đầu của Mòe, mà là những đặc điểm đã bị xóa ra khỏi mòe. Nghe lạ không? Nhưng thế đấy.
  • variable moe đã bị thay đổi

splice để chèn

do mấy hôm nay mới đầu tháng 5 mà đã nắng nóng lè cả lưỡi nên Mòe quyết định thêm vào 1 đặc điểm đó là "khatnuoc"

let moe = ["dangyeu", "chamchi","thomtho"];
moe.splice(0,0,"khatnuoc");
let nhungdacdiembiloaibo=moe.splice(0,0,"khatnuoc");

Kết quả

console.log(nhungdacdiembiloaibo)       []  đây là một array rỗng vì chỉ thêm khát nước vào chứ có xóa cái gì đi đâu hehe

split

cú pháp split(dấu hiệu chia tách, số lượng chia tách) ở đây có nghĩa là gì?

Nếu dấu hiệu chia tách là "" (string rỗng) thì string gốc sẽ tách ra thành từng chữ cái. Nếu dấu hiệu là " " (string chứa dấu cách) thì string gốc tách ra theo từng chữ.

let khauhieu = "moe xinh dep quyen ru";
let datach = khauhieu.split("");
console.log(datach);  ["m","o","e"," ","x","i","n","h"," ","d","e","p"," ","q","u","y","e","n"," ","r","u"] 

^ có cả phần tử " "

let khauhieu = "moe xinh dep quyen ru";
let datach = khauhieu.split(" ");
console.log(datach);  ["moe","xinh","dep","quyen","ru"]
tiêu chí phân loại concat join
lấy cái gì 2 string (làm thì làm được nhưng MDN khuyên không dùng mà hãy sử dụng dấu +) hoặc 2 array (không thấy khuyên gì) , từ giờ trở đi chỉ lấy ví dụ 2 array chỉ 1 array
trả về gì 1 array mới 1 string mới
số phận arr/str ban đầu toàn thây toàn thây
cú pháp arr.concat(arr2) arr.join(nhét gì vào giữa những thành phần sau khi join)

Nói về array: Concat để sáp nhập 2 array lại với nhau tạo ra 1 array mới. Join để kết nối các phần tử nội bộ bên trong một array lại để làm thành 1 string.

let x = [1,2,3]
let y = [4,5,6]
let z = x.concat(y);

console.log(x);   [1,2,3]
console.log(y);  [4,5,6] 
console.log(z);  [1,2,3,4,5,6] 

đó là concat, còn join thì lưu ý là nếu ko nói ra string chèn thì mặc định là dấu phẩy như sau

let x = [1,2,3]

let a = x.join("+");
let b = x.join();
let c = x.join("");
console.log(a);   "1+2+3"
console.log(b); "1,2,3"
console.log(c);  "123"

nhìn cái hình này là nói lên tất cả rồi phải không, hehe

tiêu chí phân loại push pop shift unshift
để làm gì nhét một hoặc vài thằng vào đứng cuối hàng kickass một thằng đứng bét ra khỏi hàng kickass thằng đứng đầu ra nhét một hoặc vài thằng vào đứng đầu
trả về gì chiều dài array sau khi thêm mấy thằng kia vào thằng bị kick thằng bị kick chiều dài array sau khi được thêm mấy thằng kia vào
số phận arr ban đầu tất cả đều thay đổi
0