Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript如何组合两个lambda表达式_Lambda_Typescript - Fatal编程技术网

Typescript如何组合两个lambda表达式

Typescript如何组合两个lambda表达式,lambda,typescript,Lambda,Typescript,如何将两个lambda表达式与Typescript组合 C#确实有类表达式Func来处理lambda表达式,但Typescript没有此选项 我有一个函数将lambda表达式传递给func,名为GetCurrentRange 例如this.GetCurrentRange(开始,结束,x=>x.AccountId==Account.id) 另一个函数添加到它的表达式上 result=result.And(x=>x.Date>=CurrentStart) 如何使用Typescript执行此操作 当然

如何将两个lambda表达式与Typescript组合

C#确实有类表达式Func来处理lambda表达式,但Typescript没有此选项

我有一个函数将lambda表达式传递给func,名为GetCurrentRange

例如
this.GetCurrentRange(开始,结束,x=>x.AccountId==Account.id)

另一个函数添加到它的表达式上

result=result.And(x=>x.Date>=CurrentStart)

如何使用Typescript执行此操作

当然这里有更多的细节

编辑这里

private GetCurrentRange(start?: Date, end?: Date, activeSpec: (exception: AccountTransaction) => boolean)
    {
        var result = activeSpec;
       /// some code here

       result = result (need to add exception here )(x => x.Date >= currentStart);  

    }
}
return result;
}


我喜欢这个问题。。。下面是一个完整的示例,然后是一个快速的解释:

class Example {
    constructor(
        public num: number,
        public bool: boolean
    ) {}
}

var examples: Example[] = [
    new Example(5, true),
    new Example(5, false),
    new Example(6, true),
];

function exampleFilter(arr: Example[], predicate: (x: Example) => boolean) {
    var matches: Example[] = [];
    for (var i = 0; i < arr.length; i++) {
        if (predicate(arr[i])) {
            matches.push(arr[i]);
        }
    }
    return matches;
}


function exampleFilter2(arr: Example[], predicate: (x: Example) => boolean) {

    var newPredicate = function(x: Example) {
        return x.bool && predicate(x);
    }

    var matches: Example[] = [];
    for (var i = 0; i < arr.length; i++) {
        if (newPredicate(arr[i])) {
            matches.push(arr[i]);
        }
    }
    return matches;
}

var a = exampleFilter(examples, (x) => x.num < 6);
console.log(a);

var b = exampleFilter2(examples, (x) => x.num < 6);
console.log(b);
这就是你可以用来制作一个你在问题中描述的可精加工物品的技巧

查询类 下面是一个类的基本示例,该类将充当T类型数组上的泛型查询

class Query<T> {

    constructor(private arr: T[], private predicate: (x:T) => boolean) {}

    and(predicate: (x:T) => boolean) {
        var priorCondition = this.predicate;
        this.predicate = (x:T) => {
            return priorCondition(x) && predicate(x);
        }
        return this;
    }

    toList() {
        var matches: T[] = [];
        for (var i = 0; i < this.arr.length; i++) {
            if (this.predicate(this.arr[i])) {
                matches.push(this.arr[i]);
            }
        }
        return matches;
    }
}
甚至:

var result = new Query(examples,  (x) => x.num < 6).and((x) => x.bool).toList();
var result=新查询(示例,(x)=>x.num<6)和((x)=>x.bool.toList();
小心
小心一个我在这个区域见过几次的错误。。。我们现在有了一个API,它看起来有点像Linq,行为也有点像Linq,但您需要使用它。

我不确定我是否完全理解了这个问题,您能给出一个更完整的示例吗?
class Query<T> {

    constructor(private arr: T[], private predicate: (x:T) => boolean) {}

    and(predicate: (x:T) => boolean) {
        var priorCondition = this.predicate;
        this.predicate = (x:T) => {
            return priorCondition(x) && predicate(x);
        }
        return this;
    }

    toList() {
        var matches: T[] = [];
        for (var i = 0; i < this.arr.length; i++) {
            if (this.predicate(this.arr[i])) {
                matches.push(this.arr[i]);
            }
        }
        return matches;
    }
}
var q = new Query(examples,  (x) => x.num < 6);
q.and((x) => x.bool);

var result = q.toList();
var result = new Query(examples,  (x) => x.num < 6).and((x) => x.bool).toList();