我正在上一门很酷的关于JavaScript函数式编程的在线课程。我一直沿着得很好,直到老师使用X11 M0 N1 X,它在运行时对我不起作用。
我想用“reject”代替for循环,因为它的代码更少。但是,我的浏览器,NodeJS和Express Code控制台告诉我reject is not a function
。
我研究了其他讨论promise.reject
不是函数的文章,但这些文章提供的解决方案对我的场景没有意义。
以下是本课程中的示例代码:
var animals = [
{ name: 'Fluffykins', species: 'rabbit' },
{ name: 'Caro', species: 'dog' },
{ name: 'Hamilton', species: 'dog' },
{ name: 'Harold', species: 'fish' },
{ name: 'Ursula', species: 'cat' },
{ name: 'Jimmy', species: 'fish' }
];
var isDog = function(animal){
return animal.species === 'dog';
}
var otherAnimals = animals.reject(isDog);
使用for循环的变通方法:
var notDogs = animals.filter(function(animal){
return animal.species !== 'dog';
});
其输出为:
> notDogs
[ { name: 'Fluffykins', species: 'rabbit' },
{ name: 'Harold', species: 'fish' },
{ name: 'Ursula', species: 'cat' },
{ name: 'Jimmy', species: 'fish' } ]
请帮助我使用Array.prototype.reject()。
编辑L
我在GitHub/Array.prototype.reject中找到了Array.prototype.reject()
7条答案
按热度按时间xwmevbvl1#
除非库/自定义代码将
reject
方法添加到Arrays,否则Array.prototype.reject
不是一个东西。为了达到你想要的效果,你应该像现在这样使用
Array.prototype.filter
方法,我不确定你认为它长了多少,因为你可以用同样的方式写它:11dmarpk2#
正如前面提到的in another answer,这在youtube关于函数式编程的系列文章中提到过,视频上传者确实用注解纠正了这个错误,但如果你是在移动终端上观看视频,你可能没有看到这一点。
kzmpq1sx3#
数组.prototype.reject在普通JavaScript中不存在。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array
看起来您使用的是funfunfunction提供的示例:https://www.youtube.com/watch?v=BMUiFMZr7vk
请注意,他实际上从未执行过他在本视频中演示的任何代码。
正如其他人所说,reject确实存在于lodash/下划线中,或者像Dymos建议的那样,使用filter也可以得到同样的结果。
fcy6dtqo4#
reject函数类似于.filter,但方向相反,所以你可以。你可以使用filter函数,用逻辑运算符NOT来反转回调,以反转结果。
iyfamqjs5#
对于快速和肮脏的工作!
oug3syen6#
您可以在破折号/下划线处找到
_.reject
我认为您可以使用
Array.prototype.reduce
,没有任何问题,但这里的问题是,您混合了reduce
和reject
。reject
产生与filter
相反的没有被拒绝元素的阵列。reduce
从项目列表中生成全新的一个项目值示例:
mbzjlibv7#