Giải thích kết quả của filter()

const words = [0, 0, 0, 2];
const result = words.filter(num => num);
console.log(result);

Đáp án ra Array[2] là vì sao ạ

Vì 0 là false :smiley: còn lại là true.

4 Likes

mình hơi thắc mắc cái num => num mình hiểu là số suy ra số đúng không bạn, hay còn ý nghĩa khác ạ

1 Like

Cái num => num loại các số 0 ra khỏi array.

1 Like

Đó là cú pháp của hàm lambda. Ngoài việc nó không có tên (hàm JS không có tên gọi là function expression) thì nó còn không có this và không có mảng đối số.

3 Likes

Bạn nên tìm hiểu kĩ hơn về “JavaScript array iteration methods” nhé, đừng nghĩ nó dễ mà bỏ qua.

Như câu này, num => num đúng như bạn nói, nó là một arrow function nhận 1 số và trả về 1 số. Tuy nhiên khi tách nó ra khỏi ngữ cảnh của filter() thì thành ra bị hiểu sai.

Code trên đầy đủ là như thế này.

const result = words.filter(function (num) {
    if (num)
        return true;
    else
        return false;
});

Thực chất filter() nó nhận vào 1 function dạng 1 tham số, nhưng phải trả về boolean. Vấn đề này do thằng JavaScript sida có vụ truthy falsy gì đó nên làm hiểu nhầm thành function return một số.

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