Hướng dẫn random slice javascript - lát ngẫu nhiên javascript

use splice() to extract and remove an element from an array.

Use Math.random() to generate a random number from 0 to 1

multiply by the number of elements or length of the array

and trucate with Math.floor() the result to get a random index into the array.

var x = ['a','b','c','d']; 
var y = x.splice(Math.floor(Math.random()*x.length),1);

now, y contains the new array of the single element that has been extracted, and

var y = x.splice(Math.floor(Math.random()*x.length),1)[0];
0 contains the array of the remaining elements.

if instead of an array you just want the element returned, change that line to

var y = x.splice(Math.floor(Math.random()*x.length),1)[0];

Trong bài này mình sẽ giới thiệu hàm slice trong javascript, đây là hàm dùng để trích xuất một số phần tử trong mảng js.

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.freetuts.net, không được copy dưới mọi hình thức.

Hàm sẽ trả về một mảng mới, còn mảng cũ thì không bị ảnh hưởng. Trước khi đi vào khái niệm thì hãy xem ví dụ mình lấy từ trang Mozilla dưới đây.

const animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];

console.log(animals.slice(2));
// output: Array ["camel", "duck", "elephant"]

console.log(animals.slice(2, 4));
// output: Array ["camel", "duck"]

console.log(animals.slice(1, 5));
// output: Array ["bison", "camel", "duck", "elephant"]

console.log(animals.slice(-2));
// output: Array ["duck", "elephant"]

console.log(animals.slice(2, -1));
// output: Array ["camel", "duck"]

1. Slice trong javascript là gì?

Hàm slice có chức năng trích xuất một số phần tử của mảng, vị trí bắt đầu và kết thúc việc trích xuất sẽ được xác định bởi tham số truyền vào hàm.

Lưu ý là hàm sẽ trích xuất không bao gồm phần tử end truyền vào. Ví dụ

var y = x.splice(Math.floor(Math.random()*x.length),1)[0];
1 thì các phần tử được trích xuất sẽ là 1, 2 và 3 (không bao gồm phần tử 4).

Bài viết này được đăng tại [free tuts .net]

Hàm sẽ trả về kết quả là một mảng mới bao gồm các phần tử được trích xuất. Hàm sẽ không làm thay đổi mảng gốc.

Cú pháp hàm slice trong js như sau:

Trong đó:

  • var y = x.splice(Math.floor(Math.random()*x.length),1)[0];
    
    2 là vị trí bắt đầu trích xuất.
  • var y = x.splice(Math.floor(Math.random()*x.length),1)[0];
    
    3 là vị trí kết thúc, kết quả sẽ không bao gồm phần tử end.
  • Hàm sẽ return về một mảng mới.
  • Nếu
    var y = x.splice(Math.floor(Math.random()*x.length),1)[0];
    
    2 và
    var y = x.splice(Math.floor(Math.random()*x.length),1)[0];
    
    3 là giá trị âm thì nó sẽ tính từ cuối mảng trở về đầu mảng.

Ví dụ: Lấy một vài phần tử trong mảng hiện có.: Lấy một vài phần tử trong mảng hiện có.

let fruits = ['Chuối', 'Cam', 'Chanh', 'Táo', 'Xoài'];

// Lấy hai phần tử Cam và Chanh trong mảng fruits
// Ta phải nhập 1,3 vì phần tử cuối cùng không được tính.
let citrus = fruits.slice(1, 3);
​
// fruits chứa ['Chuối', 'Cam', 'Chanh', 'Táo', 'Xoài'];
// citrus chứa ['Cam','Chanh'];

2. Một ví dụ thực hành với slice trong javascript

Ví dụ: sử dụng hàm array.slice để trích xuất nội dung của mảng ban đầu.: sử dụng hàm array.slice để trích xuất nội dung của mảng ban đầu.


Trên là cú pháp và cách sử dụng hàm slice trong javascript. Đây là hàm tương đối dễ học nên mình không cho nhiều ví dụ.

Bài viết được sự cho phép của tác giả Lưu Bình An

Phương thức 

var y = x.splice(Math.floor(Math.random()*x.length),1)[0];
6 (copy cho em một miếng) có thể sử dụng trên 2 kiểu 
var y = x.splice(Math.floor(Math.random()*x.length),1)[0];
7 và 
var y = x.splice(Math.floor(Math.random()*x.length),1)[0];
8

Cách sử dụng cơ bản thì ta có thể truyền vào index bắt đầu, và index kết thúc (kết quả tả về không bao gồm index kết thúc)

Index kết thúc cũng có thể bỏ qua, lúc này nó sẽ hiểu là lấy hết luôn các phần tử còn lại.

Và nếu mà chúng ta truyền giá trị index kết thúc nó lớn hơn chiều dài của mảng, thì nó cũng không lỗi, mà trả về toàn bộ như không truyền vào

Còn vui vui, bạn không truyền vào index bắt đầu luôn, thì nó cũng không lỗi nốt, mà sẽ sao y toàn bộ các phần tử vào mảng mới

Với index bắt đầu nhận vào là 

var y = x.splice(Math.floor(Math.random()*x.length),1)[0];
9 nó sẽ hiểu là 
const animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];

console.log(animals.slice(2));
// output: Array ["camel", "duck", "elephant"]

console.log(animals.slice(2, 4));
// output: Array ["camel", "duck"]

console.log(animals.slice(1, 5));
// output: Array ["bison", "camel", "duck", "elephant"]

console.log(animals.slice(-2));
// output: Array ["duck", "elephant"]

console.log(animals.slice(2, -1));
// output: Array ["camel", "duck"]
0 (em cũng lại javascript)

Index bắt đầu lớn hơn độ dài của array? Nó sẽ cho ta kết qua là một mảng rỗng

Chưa đủ thú vị? Vậy truyền vào số âm thì sao?

Lúc này nó sẽ được tính theo cơ chế index ngược, các giá trị âm sẽ được tính theo index: thằng cuối cùng là -1, áp cuối là -2, và cứ tiếp tục đi ngược lên.

Chúng ta có thể dùng nó để lấy các phần tử từ phải qua trái (2 phần tử cuối, 3 phần tử cuối, ví dụ vậy)

Đối với String thì cũng cách dùng cũng tương tự như Array (mai quá!)

Mình nghĩ 

const animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];

console.log(animals.slice(2));
// output: Array ["camel", "duck", "elephant"]

console.log(animals.slice(2, 4));
// output: Array ["camel", "duck"]

console.log(animals.slice(1, 5));
// output: Array ["bison", "camel", "duck", "elephant"]

console.log(animals.slice(-2));
// output: Array ["duck", "elephant"]

console.log(animals.slice(2, -1));
// output: Array ["camel", "duck"]
1 cũng là một trong những phương thức chúng rất hay sử dụng, như trong reducer của redux, dùng nó để sao y một state nào đó. Nên việc nắm vững, thực hành với nó nhiều là điều rất chi cần thiết.

https://dev.to/sandeshgit/understanding-the-slice-method-in-javascript-the-basics-negative-indexing-and-the-concept-of-shallow-copy-3m3i

Bài viết gốc được đăng tải tại vuilaptrinh.com

Có thể bạn quan tâm:

  • [Javascript] Những phương thức mà bạn cần biết khi thao tác với mảng
  • Tips xử lý Array Javascript hay không phải ai cũng biết
  • Sự khác nhau của bộ 3 Slice, Splice và Split trong Javascript

Xem thêm các việc làm JavaScript hấp dẫn tại TopDev