Я воссоздаю функции из библиотеки подчеркивания, но я запускаю блокпост при попытке реализовать функцию _.reject()
. Для целей этого вопроса я включу код, который я написал для трех функций: _.each()
, _.filter()
и _.reject()
.Как использовать логический оператор NOT (!) При вызове функций в JS?
_.each = function(collection, iterator) {
if (Array.isArray(collection)) {
for (var i = 0; i < collection.length; i++) {
iterator(collection[i], i, collection);
}
} else {
for (var i in collection) {
iterator(collection[i], i, collection);
}
}
};
_.filter = function(collection, test) {
var results = [];
_.each(collection, function(i) {
if (test(i)) {
results.push(i);
}
})
return results;
};
А вот код функции, я получаю проблемы с, методом _.reject()
, наряду с isEven()
функции, что я прохожу в качестве аргумента test
.
_.reject = function(collection, test) {
return _.filter(collection, !test);
};
var isEven = function(x) {
if (x % 2 === 0) return true;
return false;
};
Согласно MDN's page on Expressions and Operators, логического НЕ (!) Оператор Returns false if its single operand can be converted to true; otherwise, returns true.
Но когда я запускаю следующий код _.reject([1,2,3], isEven)
я получаю сообщение об ошибке, что test is not a function
. Почему я не могу использовать оператор !
при вызове функции (например, _.filter([1,2,3], !isEven)
)?
Похоже, что, возможно, вы хотите '! Test()' вместо этого. Отрицание функции бессмысленно. Отрицание возвращаемого значения функции более полезно. – CollinD
Ах, я думал, что отрицание функции a la '! IsEven' приведет к отрицанию возвращаемого значения. – giwook
Я отправил ответ, который может предоставить решение. дайте мне знать, как это происходит. – CollinD