Angular2 JSON重复删除

时间:2016-10-15 04:27:38

标签: arrays json angular

我正在处理一个大型JSON文件,其中包含有关我学校教师的信息。我希望能够从此列表中提取所有教师姓名,以便我可以将它们放入Firebase。但是,每当我遍历我的JSON文件并尝试过滤掉所有重复的教师名称时,即使我尝试进行第二轮删除,我仍然会重复。 JSON看起来像这样:

{
"Id": "1",
…
"Instructor": "name1, name2, name3", 
…
},
{
"Id": "2",
…
"Instructor": "name1", 
…
},
{
"Id": "3",
…
"Instructor": "name1, name2", 
…
}

如上所述,有时候只有一个名字,有时候会有多个名字。我虽然在我的逻辑中处理这个问题,但无论我最终还是重复一遍。如果有人能帮助我找到解决这个问题的方法,我将不胜感激。我将添加我已经在下面的代码。

public remove_duplicates(arr: any[]): any[] {
    let output: any[] = [];
    for (let i = 0; i < arr.length; i++) {
      let instruc: any[] = arr[i].Instructor.split(',');
      for (let j = 0; j < instruc.length; j++) {
        let push: boolean = true;
        arr[i].Instructor = instruc[j];
        for (let k = 0; k < output.length; k++) {
          let i1: string = output[k].Instructor;
          let i2: string = arr[i].Instructor;
          if (i1.trim().localeCompare(i2.trim()) == 0) {
            push = false;
          }
        }
        if (push)
          output.push(arr[i]);
      }
    }

    console.log(output.length);
    for (let k = 0; k < output.length; k++) {
      for (let i = k + 1; i < output.length; i++) {
        if (new String(output[i].Instructor).valueOf().trim()
          === new String(output[k].Instructor).valueOf().trim()) {
          output.splice(i, 1);
        }
      }
    }

    for (let k = 0; k < output.length; k++) {
      console.log(output[k].Instructor);
    }

    console.log(output.length);
    return arr;
  }

  ngOnInit() {
    this.http.get('courses.json').take(1)
      .map((res: Response) => res.json())
      .subscribe(
      data => {
        this.list = data;
      },
      err => console.log(err),
      () => this.remove_duplicates(this.list)
      );
  }

1 个答案:

答案 0 :(得分:0)

您没有尝试过Angular 2的任何特定内容。这只是香草JS。

尝试这样的事情:

public remove_duplicates(arr) {
    let seen = {};
    let uniqueInstructorNames = [];
    arr.forEach(function(item) {
        let instructorNames = item.Instructor.split(',');
        Array.prototype.push.apply(uniqueInstructorNames, instructorNames.filter( name => { 
            return seen.hasOwnProperty(item) ? false : (seen[item] = true);
        }));
    });
    return uniqueInstructorNames;
}