谓词可以是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?
答案 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);