Hai cách a và b dưới đây đều trả về một object có cùng thuộc tính và giá trị. Theo bạn thì cách nào tối ưu hơn?
const arr = [1, 2, 3]
const a = arr.reduce(
(acc, el, i) => ({ ...acc, [el]: i }),
{}
);
const b = {};
for (let i = 0; i < arr.length; i++) {
b[arr[i]] = i;
}
const arr = [1, 2, 3]
const a = arr.reduce(
(acc, el, i) => ({ ...acc, [el]: i }),
{}
);
const b = {};
for (let i = 0; i < arr.length; i++) {
b[arr[i]] = i;
}
Trả lời:
Đáp án đúng: B
Cách `b` (sử dụng vòng lặp `for`) tối ưu hơn cách `a` (sử dụng `reduce`).
**Giải thích:**
* **Cách `a` (sử dụng `reduce`):** Trong mỗi lần lặp của `reduce`, một object mới được tạo ra bằng cách sao chép object tích lũy (`acc`) hiện tại (`...acc`) và thêm một cặp key-value mới. Việc tạo object mới trong mỗi lần lặp dẫn đến hiệu năng kém, đặc biệt khi mảng `arr` lớn.
* **Cách `b` (sử dụng vòng lặp `for`):** Cách này trực tiếp gán giá trị vào object `b` mà không cần tạo object mới trong mỗi lần lặp. Do đó, nó hiệu quả hơn về mặt hiệu năng.
**Kết luận:**
Trong trường hợp này, vòng lặp `for` thể hiện sự tối ưu hơn so với `reduce` khi tạo một object từ một mảng, vì nó tránh việc tạo ra các object tạm thời trong mỗi lần lặp, làm giảm thiểu chi phí hiệu năng.
Tổng hợp 500 câu hỏi trắc nghiệm Javascript có đáp án đầy đủ nhằm giúp các bạn dễ dàng ôn tập lại toàn bộ các kiến thức.
50 câu hỏi 60 phút