Skip to main content

Command Palette

Search for a command to run...

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

Published
3 min read

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ớ
17 views

More from this blog

zujs

35 posts