如果有其他的数据,如何删除一个数组中的项目?

时间:2018-02-04 19:28:27

标签: arrays typescript object

如果数组A有,则如何从数组B中删除项目。我想通过ID迭代。

数组A:它包含所有项目

[{
"Name":"John", 
"Id":1
},
{
"Name":"Peter", 
"Id":2
},
{
"Name":"Phillip", 
"Id":3
},
{
"Name":"Abby", 
"Id":4
},
{
"Name":"Don", 
"Id":5
}]

数组B:只有选中的项目

[{
"Name":"John", 
"Id":1
},
{
"Name":"Abby", 
"Id":4
}]

我想通过Id从数组A John和Abby中删除,因为它们在数组b中。

for (var i = 0; i < a.length; i++) {
   if (b[i].Id == ta[i].Id) {
      for (var j = 0; j < b[j]; j++) {
              a.splice(i, 1);
      }
   }
}

这不符合我的想法

1 个答案:

答案 0 :(得分:0)

您可以先在b中获取所有人物对象:

let idsInB: number[] = b.map(person => person.Id); // > [1, 4]

此ID数组可用于过滤a,然后将结果分配回a。让我们在函数cleanA中包含它:

function cleanA(): void {
    let idsInB: number[] = b.map(person => person.Id);
    a = a.filter((person) => -1 === idsInB.indexOf(person.Id));
}

只要cleanA的内容发生变化,您现在需要做的只是致电b

完整的工作示例:

&#13;
&#13;
interface Person {
  Id: number;
  Name: string;
}

let a: Person[] = [
    { Id: 1, Name: "John" },
    { Id: 2, Name: "Peter" },
    { Id: 3, Name: "Phillip" },
    { Id: 4, Name: "Abby" },
    { Id: 5, Name: "Don" },
];

let b: Person[] = [
    { Id: 1, Name: "John" },
    { Id: 4, Name: "Abby" },
];

function cleanA(): void {
    let idsInB: number[] = b.map(person => person.Id);
    a = a.filter((person) => -1 === idsInB.indexOf(person.Id));
}


presentArray(a, 'A before clean');
cleanA();
presentArray(a, 'A after clean');

// -------------------------------------------------------
// Displaying purposes only:
// -------------------------------------------------------

function presentArray(arr, msg) {
    document.body.innerHTML += `<br><b>${msg}:</b><br>[<br>`
    + arr.map(person => `&nbsp;&nbsp;{ Id: ${person.Id}, Name: ${person.Name} },<br>`)
         .join('')
    + ' ]<br><br>';
}
&#13;
&#13;
&#13;