# CTN 07. Toán tử delete,  Array.property.slice() và so sánh 2 object

Hello! I'm Zu.Doan

Series này mình muốn rèn luyện khả năng suy nghĩ và giải bài tập, qua đó để hiểu rõ hơn các khái niệm của Javascript.


### Bài 1

```
const array = (a) => {
  let length = a.length;
  delete a[length - 1];
  return a.length;
};

console.log(array([1, 2, 3, 4]));

const object = (obj) => {
  let key = Object.keys(obj);
  let length = key.length;
  delete obj[key[length - 1]];

  return Object.keys(obj).length;
};

console.log(object({ 1: 2, 2: 3, 3: 4, 4: 5 }));

const setPropNull = (obj) => {
  let key = Object.keys(obj);
  let length = key.length;
  obj[key[length - 1]] = null;

  return Object.keys(obj).length;
};

console.log(setPropNull({ 1: 2, 2: 3, 3: 4, 4: 5 }));
```

#### Lời giải:

```
const array = (a) => {
  let length = a.length; // lấy độ dài của mảng a
  delete a[length - 1]; // mong muốn xóa phần tử cuối cùng trong mảng a
  // tuy nhiên toán tử delete chỉ cho phép xóa chỉ định một thuộc tính của một object
  // eg: delete obj.name
  // chứ delete operator không có khả năng xóa mảng/object/hay phần tử trong mảng

  return a.length; // trả về độ dài của mảng a
};

console.log(array([1, 2, 3, 4])); // return => 4

const object = (obj) => {
  let key = Object.keys(obj); // trả về 1 mảng chứa key của object obj
  let length = key.length; // trả về độ dài của mảng key
  delete obj[key[length - 1]]; // xóa phần tử cuối cùng trong object obj

  return Object.keys(obj).length; // trả về độ dài của mảng chứa key của object obj
};

console.log(object({ 1: 2, 2: 3, 3: 4, 4: 5 })); // return => 3

const setPropNull = (obj) => {
  let key = Object.keys(obj); // trả về 1 mảng chứa key của object obj
  let length = key.length; // trả về độ dài của mảng key
  obj[key[length - 1]] = null; // gán giá trị null cho phần tử cuối cùng trong object obj

  return Object.keys(obj).length; // trả về độ dài của mảng chứa key của object obj
};

console.log(setPropNull({ 1: 2, 2: 3, 3: 4, 4: 5 })); // return => 4
```

Kiến thức liên quan:
- Toán tử delete


### Bài 2
```
var a = [1, 2, 3];
var b = [1, 2, 3];

var c = [1, 2, 3];
var d = c;

var e = [1, 2, 3];
var f = e.slice();

console.log(a === b);
console.log(c === d);
console.log(e === f);
```

#### Lời giải:

```
var a = [1, 2, 3];
var b = [1, 2, 3];

var c = [1, 2, 3];
var d = c;

var e = [1, 2, 3];
var f = e.slice(); // Array.property.slice() dùng để sao chép một phần của mảng ra một mảng mới
// Đồng thời không làm ảnh hưởng đến dữ liệu của mảng gốc (mảng e)

console.log(a === b); // bản chất array là một loại object đặc biện trong JS
// Liên hệ lại kiến thức so sánh object thì 2 object luôn luôn không bằng nhau
// trừ trường hợp 2 object cùng tham chiếu tới cùng một vùng nhớ
// => false
console.log(c === d); // biến d được gán bằng c, do đó d,c cùng trỏ tới một ô nhớ
// => true
console.log(e === f); // Theo định nghĩa thì f sẽ là một mảng mới được sao chép ra từ mảng e
//  do đó 2 mảng này vẫn tham chiếu tới 2 vùng nhớ khác nhau
// => false

```

Kiến thức liên quan:
- Array.property.slice()
- So sánh 2 object:
  + chỉ cần nhớ rằng 2 object luôn KHÔNG bằng nhau
  + trừ 1 trường hợp duy nhất là 2 object đó cùng tham chiếu tới một vùng nhớ
