Copy mảng trong javascript

Tóm tắt: trong hướng dẫn này, bạn sẽ học cách sao chép các đối tượng trong JavaScript, bao gồm cả . Để sao chép một đối tượng trong JavaScript, bạn có ba tùy chọn:

  1. Sử dụng cú pháp spread(...
  2. Sử dụng phương thức Object.assign()
  3. Chuyển đổi qua string 
    let arr1 = [ 2, 3, 4 ]
    /// mình muốn tạo 1 arr2 dạng như này [ 1, 2, 3, 4, 5 ]
    let arr2 = [ 1, ... arr1, 5 ] /// xong 😄 
    /// javascript có hàm Math.max(1, 2, 3) => kết quả là 3 
    /// bạn muốn tính max trong mangr arr2 ở trên? 
    let maxArr2 = Math.max(...arr2)
    /// đôi khi bạn cần convert string qua array
    let strMyName = "Trương Thanh Hùng ĐẸp Trai Khoai To"
    let arrMyName = [... strMyName ]
     
    0 sau đó 
    let arr1 = [ 2, 3, 4 ]
    /// mình muốn tạo 1 arr2 dạng như này [ 1, 2, 3, 4, 5 ]
    let arr2 = [ 1, ... arr1, 5 ] /// xong 😄 
    /// javascript có hàm Math.max(1, 2, 3) => kết quả là 3 
    /// bạn muốn tính max trong mangr arr2 ở trên? 
    let maxArr2 = Math.max(...arr2)
    /// đôi khi bạn cần convert string qua array
    let strMyName = "Trương Thanh Hùng ĐẸp Trai Khoai To"
    let arrMyName = [... strMyName ]
     
    1 ngược về để tạo ra object .

hùng ebudezain

hùng ebudezain

hùng đẹp trai

cú pháp spread

hùng ebudezain

hùng thông minh lắm

hùng thông minh lắm

ahihi đồ ngốc trương thanh hùng nè


const person = {
    firstName: ' Hùng Đẹp Trai',
    lastName: ' Trương Thanh'
};

// Sử dụng spread ...
let p1 = {
    ...person
};

đọc dữ liệu hộ bố

tôi thích vậy đó

The Spread Syntax

  • Cú pháp spread biểu diễn  dạng dấu 3 chấm: ...
  • Spread Syntax cho phép duyệt qua các phần tử và truyền vào phương thức như các đối số
  • Spread Syntax là Syntax của es6 nha. nếu bạn nào code javascript yêu cầu trình duyệt thấp thì cẩn thận

bài viết được viết bởi trương thanh hùng https://ebudezain.com/

đọc dữ liệu hộ bố

đọc dữ liệu hộ bố

Tính tương thích của trình duyệt web:

bài viết được viết bởi trương thanh hùng https://ebudezain.com/

hùng ebudezain

tôi thích vậy đó

hùng thông minh lắm

hùng đẹp trai

đọc dữ liệu hộ bố

ahihi đồ ngốc trương thanh hùng nè

hùng ebudezain

Copy mảng trong javascript

đọc dữ liệu hộ bố

tôi thích vậy đó

ahihi đồ ngốc trương thanh hùng nè

đọc dữ liệu hộ bố

hùng ebudezain

bài viết được viết bởi trương thanh hùng https://ebudezain.com/

ahihi đồ ngốc trương thanh hùng nè

hùng ebudezain

hùng thông minh lắm

Spread Syntax thường xuất hiện trong code các pro nodejs, chứ code js trình duyệt thì thôi né đi 😄 

hùng đẹp trai

hùng đẹp trai

hùng đẹp trai

hùng thông minh lắm

hùng đẹp trai

ví dụ khácdùngSpread Syntax

hùng đẹp trai

đọc dữ liệu hộ bố

hùng ebudezain

1 ví dụ khác khi dùng Spread Syntax như sau: 

hùng ebudezain

hùng thông minh lắm

let arr1 = [ 2, 3, 4 ]
/// mình muốn tạo 1 arr2 dạng như này [ 1, 2, 3, 4, 5 ]
let arr2 = [ 1, ... arr1, 5 ] /// xong 😄 
/// javascript có hàm Math.max(1, 2, 3) => kết quả là 3 
/// bạn muốn tính max trong mangr arr2 ở trên? 
let maxArr2 = Math.max(...arr2)
/// đôi khi bạn cần convert string qua array
let strMyName = "Trương Thanh Hùng ĐẸp Trai Khoai To"
let arrMyName = [... strMyName ]
 

tôi thích vậy đó

ahihi đồ ngốc trương thanh hùng nè

Cú Fap Fap Fap pháp assign javascript

tôi thích vậy đó

hùng ebudezain

hùng thông minh lắm

đọc dữ liệu hộ bố

đọc dữ liệu hộ bố

tôi thích vậy đó

hùng ebudezain

hùng đẹp trai

hùng ebudezain

Object.assign() được sử dụng để sao chép các giá trị của tất cả thuộc tính có thể liệt kê từ một hoặc nhiều đối tượng nguồn đến một đối tượng đích. Nó sẽ  trả về đối tượng đích đó.

tôi thích vậy đó

bài viết được viết bởi trương thanh hùng https://ebudezain.com/

hùng ebudezain

Cú pháp

hùng thông minh lắm

bài viết được viết bởi trương thanh hùng https://ebudezain.com/

đọc dữ liệu hộ bố

hùng thông minh lắm

Object.assign(target, ...sources)

đọc dữ liệu hộ bố

bài viết được viết bởi trương thanh hùng https://ebudezain.com/

hùng ebudezain

hùng đẹp trai

hùng ebudezain

Tương thích trình duyệt

hùng ebudezain

hùng đẹp trai

Copy mảng trong javascript

tôi thích vậy đó

hùng thông minh lắm

tôi thích vậy đó

Cách copy object

bài viết được viết bởi trương thanh hùng https://ebudezain.com/

ahihi đồ ngốc trương thanh hùng nè

hùng thông minh lắm

đọc dữ liệu hộ bố

// using  Object.assign() method 
const person = {
    firstName: ' Hùng Đẹp Trai',
    lastName: ' Trương Thanh'
};
let p2 = Object.assign({}, person);

hùng thông minh lắm

các ví dụ khác

tôi thích vậy đó

ahihi đồ ngốc trương thanh hùng nè

bài viết được viết bởi trương thanh hùng https://ebudezain.com/

tôi thích vậy đó

const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };

const returnedTarget = Object.assign(target, source);

console.log(target);
// expected output: Object { a: 1, b: 4, c: 5 }

console.log(returnedTarget);
// expected output: Object { a: 1, b: 4, c: 5 }

hùng đẹp trai

hùng thông minh lắm

đọc dữ liệu hộ bố

tôi thích vậy đó

hùng ebudezain

hùng ebudezain

bài viết được viết bởi trương thanh hùng https://ebudezain.com/

bài viết được viết bởi trương thanh hùng https://ebudezain.com/

hùng đẹp trai

Lưu ý là khi dùng, nếu bị trùng key thì xem như giá trị sau ( trong source ) sẽ ghi đè lên giá trị trước ( trong target )

hùng thông minh lắm

ahihi đồ ngốc trương thanh hùng nè

ví dụ: 

hùng thông minh lắm

tôi thích vậy đó

bài viết được viết bởi trương thanh hùng https://ebudezain.com/

const a = { name: 'foo' }
const b = Object.assign(a, { name: 'bar', age: 1 }, { id: 9 })
console.log(b) // { name: 'bar', age: 1, id: 9 } => object a ban đầu có name = 'foo' đã đi vào quên lãng

hùng thông minh lắm

đọc dữ liệu hộ bố

ahihi đồ ngốc trương thanh hùng nè

đọc dữ liệu hộ bố

tôi thích vậy đó

hùng thông minh lắm

đọc dữ liệu hộ bố

hùng ebudezain

hùng ebudezain

Cả spread (...) và Object.assign() đều thực hiện một shallow copy trong khi JSON methods lại là một deep copy.

bài viết được viết bởi trương thanh hùng https://ebudezain.com/

bài viết được viết bởi trương thanh hùng https://ebudezain.com/

ahihi đồ ngốc trương thanh hùng nè

đọc dữ liệu hộ bố

bài viết được viết bởi trương thanh hùng https://ebudezain.com/

Cú Fap JSON javascript

bài viết được viết bởi trương thanh hùng https://ebudezain.com/

ahihi đồ ngốc trương thanh hùng nè

ahihi đồ ngốc trương thanh hùng nè

hùng đẹp trai

hùng đẹp trai

đọc dữ liệu hộ bố

hùng ebudezain

hùng thông minh lắm

hùng thông minh lắm

Bạn có thể tưởng tượng bạn có 1 object bạn chuyển về string thì string trong javascript không hề có reference. sau đó parse ngược về object thì lúc này đó là object mới. khuyến cáo nếu bạn code javascript có trình duyệt nên sử dụng cách này đỡ suy nghĩ về sự tương thích trình duyệt.

hùng thông minh lắm

hùng ebudezain

hùng thông minh lắm

// using JSON

const person = {
    firstName: ' Hùng Đẹp Trai',
    lastName: ' Trương Thanh'
};
let p3 = JSON.parse(JSON.stringify(person));

ahihi đồ ngốc trương thanh hùng nè

hùng đẹp trai

Copy mảng trong javascript

hùng ebudezain

hùng đẹp trai

ahihi đồ ngốc trương thanh hùng nè

ahihi đồ ngốc trương thanh hùng nè

hùng đẹp trai

bài viết được viết bởi trương thanh hùng https://ebudezain.com/

bài viết được viết bởi trương thanh hùng https://ebudezain.com/

hùng đẹp trai

đọc dữ liệu hộ bố

 

bài viết được viết bởi trương thanh hùng https://ebudezain.com/

Shallow Copy vs Deep Copy

hùng ebudezain

đọc dữ liệu hộ bố

tôi thích vậy đó

đọc dữ liệu hộ bố

hùng ebudezain

hùng thông minh lắm

Trong JavaScript, bạn sử dụng các biến để lưu trữ các giá trị có thể là primitive or references. Khi bạn tạo một bản sao của một giá trị được lưu trữ trong một biến, bạn sẽ tạo một biến mới có cùng giá trị.

hùng đẹp trai

hùng ebudezain

hùng đẹp trai

ahihi đồ ngốc trương thanh hùng nè

tôi thích vậy đó

tôi thích vậy đó

Tóm gọn: Shallow Copy có nghĩa ta chỉ copy được level đầu, các level sâu hơn sẽ được hiểu là tham chiếu.