2016-10-15 4 views
0

私は、私の学校のインストラクターに関する情報を保持する大きなJSONファイルを扱っています。私はこのリストからすべての先生の名前を引っ張ってFirebaseに入れることができるようにしたいと思います。しかし、JSONファイルをループしてすべての重複する教師の名前を除外しようとすると、2回目の削除を試みても重複してしまいます。 JSONは次のようになります。Angular2 JSON Duplication Deletion

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

上記のように、時には1つの名前があり、それ以外のときは複数あります。私は論理的にはこれを扱っていますが、私はまだ重複してしまいます。誰かが私がこれを解決する方法を考え出すのを助けることができれば、それは非常に高く評価されるだろう。私は既に私のコードを追加します。

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

答えて

0

ここで実行しようとしている角度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; 
} 
+0

はどうもありがとうございました!それが100%動作するように変更する必要があった少しがあった。まず、instructorsNamesの要素のすべての空白を削除するようにしました。それであなたは[item] = trueと見えましたが、それは[name]に見える必要がありました。 seen.hasOwnProperty()と同じです。アイテムが見られたときに格納されていたJSONオブジェクトは、動作しませんでした。それらの変更が完了したら、それは完全に働いた、もう一度ありがとう! – rpascal

関連する問題