javascript - Angular2 应用优化

标签 javascript arrays angular

我在 Angular2 上编写应用程序时遇到了一些问题。 上下文:我有 3 个数组,我应该过滤第三个数组中的两个数组。 示例:

a = [1,2,3,4,5] //get async 1 times
b = [1,2,5] //get async 1 times
c = [{a:1,b:2},{a:2,b:5}] //get async many times

我应该得到 a = [3,4,5] b = [1] .

我在 angular2 中的解决方案:

我创建了 Map<a>Map<b>并使用它们过滤模板中的数组。

<div *ngIf="!excludeCompetitors.has(competitor.id)" (click)="selectCompetitor(competitor)">{{competitor.shortName}} - {{competitor.longName}}</div> 

但我认为它不是有效的,因为 Angular ChangeDetection。也许我应该计算数组并​​使用计算数组?

最佳答案

你可以像下面这样创建一个过滤器函数:

var a = [1,2,3,4,5];
var b = [1,2,5];
var c = [{a:1,b:2},{a:2,b:5}];
var fa = filter(a, c[0]);
var fb = filter(b, c[1]);
console.log("fa: ", fa);
console.log("fb: ", fb);
// -------------- //
filter(arr, filt): number[] {
    return arr.filter(item => {
        var keys = Object.keys(filt);
        return !keys.some(key => filt[key] === item);
    });
}

更新:

如果你希望在 c 改变时更新 a 和 b,你可以使用 Angular 管道:

// Your pipe:

@Pipe({ name: 'arrayFilter' })
export class ArrayFilter implements PipeTransform {
    transform(arr: number[], filt: any) {
        console.log("filter called");
        return arr.filter(item => {
            var keys = Object.keys(filt);
            return !keys.some(key => filt[key] === item);
        });
    }
}

// Add the pipe in declarations of your module:

@NgModule({
    // ...
    declarations: [ ArrayFilter ],
    // ...
})

// In your template:

<div *ngFor="let n of a | arrayFilter: c[0]"> {{ n }}</div>
<div *ngFor="let n of b | arrayFilter: c[1]"> {{ n }}</div>

// In your component:

a = [1,2,3,4,5];
b = [1,2,5];
c = [{a:1, b:2},{a:2, b:5}];

关于javascript - Angular2 应用优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45587605/

相关文章:

javascript - 我的 Ajax 代码只从 Mysql 数据库行中获取一行的值

c# - 一步获取使用索引数组的子数组

c++ - C/C++中的数组大小

angular - EventEmitter<undefined> 和 EventEmitter<void> 有什么区别?

Angular 重定向到默认 subview

javascript - Azure 移动服务 invokeAPI 调用出现控制台错误

javascript - angularjs http post 与 Angular 和 GAE

javascript - 如何获取原型(prototype)属性列表

java - 在java中将String[]数组转换为动态char[]数组?

Angular 2 单元测试 routerLink 点击 html 元素