const words = [0, 0, 0, 2];
const result = words.filter(num => num);
console.log(result);
Đáp án ra Array[2] là vì sao ạ
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 còn lại là true.
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 ạ
Cái num => num
loại các số 0 ra khỏi array.
Đó 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ố.
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ố.