javascript 数组.原型.拒绝():类型错误:....reject不是函数

7xllpg7q  于 2023-02-28  发布在  Java
关注(0)|答案(7)|浏览(148)

我正在上一门很酷的关于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()

xwmevbvl

xwmevbvl1#

除非库/自定义代码将reject方法添加到Arrays,否则Array.prototype.reject不是一个东西。
为了达到你想要的效果,你应该像现在这样使用Array.prototype.filter方法,我不确定你认为它长了多少,因为你可以用同样的方式写它:

var animals = [
  { name: 'Fluffykins', species: 'rabbit' }, 
  { name: 'Caro', species: 'dog' }, 
  { name: 'Jimmy', species: 'fish' }
];

function noDogs(animal) {
  return animal.species !== 'dog';
}

var otherAnimals = animals.filter(noDogs);
console.log(otherAnimals);
11dmarpk

11dmarpk2#

正如前面提到的in another answer,这在youtube关于函数式编程的系列文章中提到过,视频上传者确实用注解纠正了这个错误,但如果你是在移动终端上观看视频,你可能没有看到这一点。

kzmpq1sx

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也可以得到同样的结果。

fcy6dtqo

fcy6dtqo4#

reject函数类似于.filter,但方向相反,所以你可以。你可以使用filter函数,用逻辑运算符NOT来反转回调,以反转结果。

Array.prototype.reject = function(fn){return this.filter(x => !fn(x))}
  • fn是回调
  • 这是reject函数已被调用的数组。
  • x是该数组的当前项
iyfamqjs

iyfamqjs5#

对于快速和肮脏的工作!

Array.prototype.reject = function(fn) {
 let rej = test => !fn(test);
 return this.filter(rej);
};
oug3syen

oug3syen6#

您可以在破折号/下划线处找到_.reject
我认为您可以使用Array.prototype.reduce,没有任何问题,但这里的问题是,您混合了reducereject
reject产生与filter相反的没有被拒绝元素的阵列。
reduce从项目列表中生成全新的一个项目值
示例:

function even(number) {
  return number % 2 === 0;
}

_.reject([1, 2, 3, 4], even); // [1, 3]
_.filter([1, 2, 3, 4], even); // [2, 4]

// reduce is totally different method
_.reduce([1, 2, 3, 4], function(total, current) {
  return total + current;
}, 0); // 10
mbzjlibv

mbzjlibv7#

  • 让我们以这个数组为例 *
const animals = [
    {name: 'Sheru', species: 'Dog' },
    {name: 'Manya', species: 'Cat' },
    {name: 'Monya', species: 'Dog' },
    name: 'Dolly', species: 'fish' }
   ]
  • 我们可以创建一个类似这样的拒绝函数 *
Array.prototype.reject = function (callback) {
            return this.filter((each, index, array) => !callback(each, index, array))
 }

# We can use something like this to test it

const result = animals.reject((each) => each.species == 'Dog');

console.log(result);

相关问题