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ớ
