我正在处理一个大型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)
);
}
答案 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;
}