Я сделал ошибку в предикате, который я передал фильму, и получил любопытный результат. Я, конечно, должен был написать emp.gender === "F"
. Тем не менее, учитывая, что undefined
является ложным, я ожидал, что femaleEmployees
будет пустым массивом. Однако он включает в себя все элементы исходного массива.
var employees = [
{ name: "bob", gender: "M" },
{ name: "lisa", gender: "F" },
{ name: "vera", gender: "F" }
];
var femaleEmployees = employees.filter(emp => emp.gender = "F");
Я подозреваю, что это имеет какое-то отношение к этому, но я не совсем уверен, как: Почему "undefined equals false" возвращает false?
Вы должны использовать ==
или ===
для сравнения значений вместо назначения символа =
. Непустая строка является истинным значением, поэтому результат включает в себя все элементы, поскольку он всегда возвращает "F"
который является правдивым (т.е. Вы обновляете свойство gender
как "F"
а затем возвращаете значение свойства, которое равно "F"
),
var femaleEmployees = employees.filter(emp => emp.gender === "F");
Refer: Какой оператор equals (== vs ===) должен использоваться в сравнении JavaScript?
emp.gender = "F"
. Это не проверкаemp.gender = "F"
, это всегда так ("F" - правда). Вы присваиваете переменную, вы, вероятно, хотите сравнить ее.