J'ai un problème avec le filtre dans mon tableau JSON lorsque je déplace mon application vers Angular2. Dans Angular 1.x c'était plus facile. J'ai utilisé 'unique'
dans le filtre et cela supprime tous les doublons.
applications:
{"app":"database_1",
"Host":"my_Host1",
"ip":"00.000.00.000"
},
{"app":"database_1",
"Host":"my_Host1",
"ip":"00.000.00.000"
},
{"app":"database_2",
"Host":"my_Host2",
"ip":"00.000.00.000"
},
{"app":"database_2",
"Host":"my_Host2",
"ip":"00.000.00.000"
}
Partie du code html:
<div *ngFor='#appsUnique of apps '>
<div class="row dashboard-row">
<div class="col-md-2">
<h4>{{appsUnique.app }}</h4>
</div>
</div>
</div>
Et le résultat est:
database_1
database_1
database_2
database_2
Je veux obtenir un résultat:
database_1
database_2
Comment supprimer les doublons d'un tableau?
J'ai une solution à ce problème :)
Array.from(new Set([{"app":"database_1",
"Host":"my_Host1",
"ip":"00.000.00.000"
},
{"app":"database_1",
"Host":"my_Host1",
"ip":"00.000.00.000"
},
{"app":"database_2",
"Host":"my_Host2",
"ip":"00.000.00.000"
},
{"app":"database_2",
"Host":"my_Host2",
"ip":"00.000.00.000"
}].map((itemInArray) => itemInArray.app)))
En savoir plus sur Array.from & Set
Merci à tous pour votre aide :)
Peut-être que cela peut vous aider
myList = ["One","two","One","tree"];
myNewList = Array.from(new Set(myList ));
Vous pouvez utiliser la méthode suivante:
names = ["Mike","Matt","Nancy","Adam","Jenny","Nancy","Carl"];
ngOnInit() {
let filteredNames=this.remove_duplicates(this.names);
console.log(filteredNames);
console.log(this.names);
}
remove_duplicates(arr) {
let obj = {};
for (let i = 0; i < arr.length; i++) {
obj[arr[i]] = true;
}
arr = [];
for (let key in obj) {
arr.Push(key);
}
return arr;
}
J'espère que cela t'aides.
Vous pouvez également utiliser l'approche Observable, c'est très simple.
let filteredData = [];
let arrayData = [{
"app": "database_1",
"Host": "my_Host1",
"ip": "00.000.00.000"
},
{
"app": "database_1",
"Host": "my_Host1",
"ip": "00.000.00.000"
},
{
"app": "database_2",
"Host": "my_Host2",
"ip": "00.000.00.000"
},
{
"app": "database_2",
"Host": "my_Host2",
"ip": "00.000.00.000"
}];
Observable.merge(arrayData)
.distinct((x) => x.app)
.subscribe(y => {
filteredData.Push(y)
console.log(filteredData)
});
au lieu de boucler sur le tableau json normal, vous pouvez créer un autre tableau dans votre classe TypeScript correspondante et le modifier comme bon vous semble. Dans votre html, vous pouvez alors avoir les éléments suivants
<div *ngFor='let appsUnique of filteredApps'>
<div class="row dashboard-row">
<div class="col-md-2">
<h4>{{appsUnique.app }}</h4>
</div>
</div>
</div>
Ensuite, vous avez besoin de ce tableau filtréApps dans votre classe TypeScript correspondante.
let filteredApps = [];
et dans une fonction, vous pouvez ensuite créer ces applications filtrées, par exemple dans la méthode onInit
.
onInit()
{
filteredApps = // filter logic
}
Vous aurez besoin de trackBy .
Essayez avec:
*ngFor="#appsUnique of posts;trackBy:appsUnique?.app"
J'espère que cela aide.