1

我是一个初学者程序员,我在迭代数组时遇到了问题。我想在它的索引上迭代相同的列表。也就是说,我想在 [i] 上迭代 [j]。让 [j] 完成运行并增加 [i] 我想在它的索引上迭代相同的列表。也就是说,我想在 [i] 上迭代 [j]。让 [j] 完成并增加 [i] 并再次执行相同的操作,直到没有其他内容可通过。

for (let i = 0; i < results.length; i++) {
  for (let j = i+1; j < results.length; j++) {
    if (results[i].Email == results[j].Email){
      // delete the item or items from the array
    }
  
  }
  
}

有问题的数组是这个,我想检查电子邮件是否重复删除:

results = [
{Id: 1, Name: "Some", Lastname: "One", Email: "someone@email.com"}, 
{Id: 2, Name: "Some", Lastname: "One", Email: "someone@email.com"}, 
{Id: 3, Name: "Some", Lastname: "One", Email: "someother@email.com"}
]
4

2 回答 2

1

通过删除数组中的一项,可以更改数组的长度和索引的位置。

为了克服这个问题,您可以使用嵌套循环从末尾进行迭代,并检查较低索引中是否存在相同的电子邮件,如果存在则拼接该项目并继续前进。

const
    data = [{ Id: 1, Name: "Some", Lastname: "One", Email: "someone@email.com" }, { Id: 2, Name: "Some", Lastname: "One", Email: "someone@email.com" }, { Id: 3, Name: "Some", Lastname: "One", Email: "someother@email.com" }];
    
let i = data.length;

while (i--) {
    let j = i;
    while (j--) {
        if (data[i].Email === data[j].Email) {
            data.splice(i, 1);
            break;
        }
    }
}

console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }

您可以将对象作为已查看电子邮件的参考,而不是使用嵌套循环来删除重复项。

const
    data = [{ Id: 1, Name: "Some", Lastname: "One", Email: "someone@email.com" }, { Id: 2, Name: "Some", Lastname: "One", Email: "someone@email.com" }, { Id: 3, Name: "Some", Lastname: "One", Email: "someother@email.com" }],
    seenEmails = {};
    
let i = 0;

while (i < data.length) {
    if (seenEmails[data[i].Email]) {
        data.splice(i, 1);
        continue;
    }
    seenEmails[data[i].Email] = true;
    i++;
}

console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }

于 2021-03-09T09:19:49.667 回答
0

你可以做:

for (let i = 0; i < results.length; i++) {
  for (let j = 0; j < results.length; j++) {
    // this will leave just one entry with the same email
    if (i != j && results[i].Email == results[j].Email){
      results.splice(j, 1);
      j--;
      i--;
    }
  }
}
于 2021-03-09T09:19:38.583 回答