【问题标题】:Angular2 JSON Duplication DeletionAngular2 JSON重复删除
【发布时间】:2016-10-15 04:27:37
【问题描述】:

我正在处理一个包含我学校教师信息的大型 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)
      );
  }

【问题讨论】:

    标签: arrays json angular


    【解决方案1】:

    您在这里没有尝试做任何特定于 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;
    }
    

    【讨论】:

    • 非常感谢!需要进行一些更改才能使其 100% 正常工作。首先我做了它,所以它修剪了instructorsNames中元素的所有空白。然后你输入了 seen[item] = true,但它需要被看见[name]。相同的 seen.hasOwnProperty()。当项目被存储时,它存储了整个 JSON 对象,但它不起作用。一旦这些更改使其完美运行,再次感谢!
    猜你喜欢
    • 2016-11-24
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    相关资源
    最近更新 更多