谓词可以是JavaScript中的对象吗?

时间:2018-11-15 13:11:28

标签: javascript

谓词可以是JavaScript中的对象(如C ++)吗?

例如,是否可以使用这样的谓词在数组(带有arr.findIndex(pred))中找到元素的索引?

    class Predicate
    {
        constructor()
        {
            this.sum = 0;
        }

        evaluate(elem)
        {
            this.sum += elem;
            return sum > 25;
        }
    }

    const pred = new Predicate();

    const index = arr.findIndex(pred);

EDIT1 :如果否,最简单的方法是找到一个元素的索引,使该元素与之前所有元素的总和超过25?

3 个答案:

答案 0 :(得分:1)

应该是一个回调,这是函数定义

arr.findIndex(callback(element[, index[, array]])[, thisArg])

您可以提供谓词对象评估方法。像这样

const index = arr.findIndex(pred.evaluate,pred);// pass pred as thisArg

答案 1 :(得分:1)

谓词必须是一个函数。 MDN。但是您总是可以创建一个返回另一个函数的函数。

const runningSum = (sum, current = 0) => value => (current += value) > sum

const index = [1, 2, 3, 4, 5, 6, 7, 8, 9].findIndex(runningSum(25))

console.log(index)

答案 2 :(得分:1)

JavaScript中没有evaluate方法(当对象像函数一样被调用时会被调用)之类的东西。但是,函数本身就是对象,您could even create them with class syntax。但是,它并不是很有用,在JS中,您只需编写一个闭包以创建具有实例特定值的函数:

function predicate(max) {
    var sum = 0;
    return function(elem) {
        sum += elem;
        return sum > max;
    };
}

const pred = predicate(25);

const index = arr.findIndex(pred);