Chuyển số mảng số nguyên thành mảng object bị null

Không sử dụng cặp ngoặc

const arr = [1,2,3,4,5];
const arrObj = arr.map(item => {num:item});
// kết quả arrObj = [undefined, undefined, undefined, undefined, undefined]

Có sử dụng cặp ngoặc

const arr = [1,2,3,4,5];
const arrObj = arr.map(item => ({num:item}) );
// kết quả arrObj = [{num: 1},{num: 2}, {num: 3}, {num: 4}, {num: 5}]

Anh chị giải thích gúp em với, em cảm ơn!
Để tạo một object thì chỉ cần key value như này là đúng rồi mà {num:item}, với lại truyền callback là một arrow function thì sau dấu mũi tên => là return {num:item}, thế mà thiếu () dẫn đến lỗi.

Bạn quên hoặc chưa biết, cấu trúc hàm lambda nó có dùng đến ngoặc nhọn để bao khối lệnh. Nếu chỉ đơn giản trả về 1 giá trị mà không cần làm gì khác thì không cần cặp ngoặc nhọn.

// rút gọn
x => x + 1 // trả về x + 1

// đầy đủ
x => {return x + 1} // cặp ngoặc nhọn bao ngoài thì phải có lệnh return để trả về một giá trị.

Vì thế khi bạn viết {num:item} thì nó tương đương với thực hiện lệnh num:item và không trả về gì.

Sửa: chính xác phải là biểu thức lamnda chứ không phải hàm lambda do chức năng giống hàm nên quen mồm.:grin:

4 Likes

Nhưng mà đây là arrow function đâu phải lambda đâu anh, mà tại sao {num:item} không phải là giá trị :thinking:? Nó cũng là giá trị object ạ

Khi cậu cần trả về object literal, cậu cần dấu ngoặc tròn đó.

See also:

P/s: Arrow function có thể hiểu tương đương với biểu thức lambda đó cậu :smile:

5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?