Angular2 从 JSON 数组中删除重复项
Angular2 removing duplicates from an JSON array
当我将我的应用程序移动到 Angular2 时,我的 JSON 数组中的过滤器出现问题。在 Angular 1.x 中更容易。我在过滤器中使用了 'unique'
,这会删除所有重复项。
应用程序:
{"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"
}
部分html代码:
<div *ngFor='#appsUnique of apps '>
<div class="row dashboard-row">
<div class="col-md-2">
<h4>{{appsUnique.app }}</h4>
</div>
</div>
</div>
结果是:
database_1
database_1
database_2
database_2
我要得到结果:
database_1
database_2
如何从数组中删除重复项?
您可以在相应的打字稿 class 中创建另一个数组,而不是遍历普通的 json 数组,并根据需要更改它。在你的html中,你可以有以下
html
<div *ngFor='let appsUnique of filteredApps'>
<div class="row dashboard-row">
<div class="col-md-2">
<h4>{{appsUnique.app }}</h4>
</div>
</div>
</div>
接下来,您需要在相应的打字稿中使用此 filteredApps 数组 class。
打字稿
let filteredApps = [];
然后您可以在一个函数中创建过滤后的应用程序,例如在 onInit
方法中。
onInit()
{
filteredApps = // filter logic
}
您将需要 trackBy。
试试:
*ngFor="#appsUnique of posts;trackBy:appsUnique?.app"
希望对您有所帮助。
您可以使用以下方法:
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;
}
希望对您有所帮助。
我有解决这个问题的办法:)
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)))
感谢大家的帮助:)
说不定能帮到你
myList = ["One","two","One","tree"];
myNewList = Array.from(new Set(myList ));
你也可以使用 Observable 方法,非常简单。
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)
});
当我将我的应用程序移动到 Angular2 时,我的 JSON 数组中的过滤器出现问题。在 Angular 1.x 中更容易。我在过滤器中使用了 'unique'
,这会删除所有重复项。
应用程序:
{"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"
}
部分html代码:
<div *ngFor='#appsUnique of apps '>
<div class="row dashboard-row">
<div class="col-md-2">
<h4>{{appsUnique.app }}</h4>
</div>
</div>
</div>
结果是:
database_1
database_1
database_2
database_2
我要得到结果:
database_1
database_2
如何从数组中删除重复项?
您可以在相应的打字稿 class 中创建另一个数组,而不是遍历普通的 json 数组,并根据需要更改它。在你的html中,你可以有以下
html
<div *ngFor='let appsUnique of filteredApps'>
<div class="row dashboard-row">
<div class="col-md-2">
<h4>{{appsUnique.app }}</h4>
</div>
</div>
</div>
接下来,您需要在相应的打字稿中使用此 filteredApps 数组 class。
打字稿
let filteredApps = [];
然后您可以在一个函数中创建过滤后的应用程序,例如在 onInit
方法中。
onInit()
{
filteredApps = // filter logic
}
您将需要 trackBy。
试试:
*ngFor="#appsUnique of posts;trackBy:appsUnique?.app"
希望对您有所帮助。
您可以使用以下方法:
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;
}
希望对您有所帮助。
我有解决这个问题的办法:)
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)))
感谢大家的帮助:)
说不定能帮到你
myList = ["One","two","One","tree"];
myNewList = Array.from(new Set(myList ));
你也可以使用 Observable 方法,非常简单。
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)
});