8

当我将我的应用程序移动到 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

如何从数组中删除重复项?

4

6 回答 6

11

Mybe它可以帮助你

myList = ["One","two","One","tree"];

myNewList =  Array.from(new Set(myList ));
于 2017-10-02T13:35:35.293 回答
6

我有这个问题的解决方案:)

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)))

更多关于 Array.from & Set

谢谢大家的帮助:)

于 2016-07-22T09:15:11.513 回答
3

您可以使用以下方法:

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;
}

希望这可以帮助。

于 2016-07-21T11:01:51.183 回答
2

您也可以使用 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)
  });
于 2017-12-24T03:38:32.107 回答
1

您可以在相应的 typescript 类中创建另一个数组,而不是循环遍历普通的 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>

接下来,您需要在相应的 typescript 类中使用此 filteredApps 数组。

打字稿

 let filteredApps = [];

然后在一个函数中,您可以创建该filteredApps,例如在onInit方法中。

onInit()
{
    filteredApps = // filter logic
}
于 2016-07-21T10:53:52.177 回答
1

您将需要trackBy

尝试:

*ngFor="#appsUnique of posts;trackBy:appsUnique?.app"

希望能帮助到你。

于 2016-07-21T10:55:36.043 回答