613

我有一个在 TypeScript 中创建的数组,它有一个我用作键的属性。如果我有那个钥匙,我怎样才能从中删除一个项目?

4

18 回答 18

900

与在 JavaScript 中的方式相同。

delete myArray[key];

请注意,这会将元素设置为undefined

更好地使用该Array.prototype.splice功能:

const index = myArray.indexOf(key, 0);
if (index > -1) {
   myArray.splice(index, 1);
}
于 2013-03-08T14:06:56.030 回答
310
let foo_object; // Itemitem(object here) to remove
this.foo_objects = this.foo_objects.filter(obj => return obj !== foo_object);
于 2017-06-06T13:11:34.280 回答
117

使用 ES6,您可以使用以下代码:

removeDocument(doc){
   this.documents.forEach( (item, index) => {
     if(item === doc) this.documents.splice(index,1);
   });
}
于 2017-11-19T19:40:07.497 回答
38

这是我的解决方案:

onDelete(id: number) {
    this.service.delete(id).then(() => {
        let index = this.documents.findIndex(d => d.id === id); //find index in your array
        this.documents.splice(index, 1);//remove element from array
    });

    event.stopPropagation();
}
于 2017-09-01T07:56:38.700 回答
27

您可以splice在数组上使用该方法来删除元素。

例如,如果您有一个名称为数组,请arr使用以下内容:

arr.splice(2, 1);

所以这里索引为 2 的元素将是起点,参数 2 将确定要删除多少个元素。

如果要删除命名数组的最后一个元素,arr请执行以下操作:

arr.splice(arr.length-1, 1);

这将返回 arr 并删除最后一个元素。

例子:

var arr = ["orange", "mango", "banana", "sugar", "tea"];
arr.splice(arr.length-1, 1)
console.log(arr); // return ["orange", "mango", "banana", "sugar"]
于 2017-11-22T06:13:33.277 回答
22

让部门是一个数组。你想从这个数组中删除一个项目。

departments: string[] = [];

 removeDepartment(name: string): void {
    this.departments = this.departments.filter(item => item != name);
  }
于 2019-03-27T05:20:47.947 回答
18

这是一个简单的衬线,用于从对象数组中按属性删除对象。

delete this.items[this.items.findIndex(item => item.item_id == item_id)];

或者

this.items = this.items.filter(item => item.item_id !== item.item_id);
于 2019-09-18T18:11:22.163 回答
18

这对我有用。

你的数组:

DummyArray: any = [
    { "id": 1, "name": 'A' },
    { "id": 2, "name": 'B' },
    { "id": 3, "name": 'C' },
    { "id": 4, "name": 'D' }
]

功能:

remove() {
    this.DummyArray = this.DummyArray.filter(item => item !== item);
}

注意:此函数会删除数组中的所有对象。如果要从数组中删除特定对象,请使用此方法:

remove(id) {
    this.DummyArray = this.DummyArray.filter(item => item.id !== id);
}
于 2020-11-05T06:24:50.567 回答
10

如果您需要从数组中删除给定对象并且您希望确保以下内容,请使用此选项:

  • 列表未重新初始化
  • 数组长度已正确更新
    const objWithIdToRemove;
    const objIndex = this.objectsArray.findIndex(obj => obj.id === objWithIdToRemove);
    if (objIndex > -1) {
      this.objectsArray.splice(objIndex, 1);
    }
于 2020-03-27T18:38:14.963 回答
6

使用 TypeScript 扩展运算符回答 (...)

// Your key
const key = 'two';

// Your array
const arr = [
    'one',
    'two',
    'three'
];

// Get either the index or -1
const index = arr.indexOf(key); // returns 0


// Despite a real index, or -1, use spread operator and Array.prototype.slice()    
const newArray = (index > -1) ? [
    ...arr.slice(0, index),
    ...arr.slice(index + 1)
] : arr;
于 2018-04-10T23:51:30.987 回答
6

使用 Typescript 的另一种解决方案:

let updatedArray = [];
for (let el of this.oldArray) {
    if (el !== elementToRemove) {
        updated.push(el);
    }
}
this.oldArray = updated;
于 2018-04-30T12:41:37.607 回答
6
let a: number[] = [];

a.push(1);
a.push(2);
a.push(3);

let index: number = a.findIndex(a => a === 1);

if (index != -1) {
    a.splice(index, 1);
}

console.log(a);
于 2020-07-18T16:27:28.770 回答
6

Typescript/Javascript 中的多个选项可从 Array 中删除元素。拼接是最好的选择

  1. 它在不创建新对象的情况下删除内联
  2. 它正确地更新了数组的长度(不会留下空白的空元素)

下面是使用 Splice 函数根据对象数组中的某些字段删除对象的示例

const persons = [
 {
   firstName :'John',
   lastName :'Michel'
  },
  {
   firstName :'William',
   lastName :'Scott'
  },  
  {
   firstName :'Amanda',
   lastName :'Tailor'
  }
]

console.log('Before Deleting :'+JSON.stringify(persons));
console.log('Deleting William:');
persons.splice(persons.findIndex(item => item.firstName === 'William'),1);
console.log('After Deleting William'+JSON.stringify(persons));

于 2021-06-12T22:17:19.737 回答
1

只是想为数组添加扩展方法。

interface Array<T> {
      remove(element: T): Array<T>;
    }

    Array.prototype.remove = function (element) {
      const index = this.indexOf(element, 0);
      if (index > -1) {
        return this.splice(index, 1);
      }
      return this;
    };
于 2020-06-13T09:36:54.100 回答
0

您可以尝试先获取列表或数组的索引或位置,然后使用 for 循环将当前数组分配给临时列表,过滤掉不需要的项目并将想要的项目存储回原始数组

removeItem(index) {
    var tempList = this.uploadFile;
    this.uploadFile = [];

    for (var j = 0; j < tempList.length; j++) {
      if (j != index)
        this.uploadFile.push(tempList[j]);
    }
  }
于 2020-09-09T01:41:25.897 回答
0

filter我们可以使用and来实现逻辑includes

const checkAlpha2Code = ['BD', 'NZ', 'IN']

let countryAlpha2Code = ['US', 'CA', 'BD', 'NZ', 'AF' , 'AR' , 'BR']


/**
 * Returns the modified array countryAlpha2Code 
 * after removing elements which matches with the checkAlpha2Code
 */
countryAlpha2Code = countryAlpha2Code.filter(alpha2code => {
    return !checkAlpha2Code.includes(alpha2code);
});
console.log(countryAlpha2Code)
// Output: [ 'US', 'CA', 'AF', 'AR', 'BR' ]


// Resetting the values again
countryAlpha2Code = ['US', 'CA', 'BD', 'NZ', 'AF' , 'AR' , 'BR']


/**
 * Returns the modified array countryAlpha2Code 
 * which only matches elements with the checkAlpha2Code
 */
countryAlpha2Code = countryAlpha2Code.filter(alpha2code => {
    return checkAlpha2Code.includes(alpha2code);
});

console.log(countryAlpha2Code)
// Output: [ 'BD', 'NZ' ]

于 2021-08-19T09:48:19.943 回答
0

我看到很多抱怨remove方法不是内置的。考虑使用Set而不是数组 - 它具有内置的方法adddelete

于 2021-09-19T19:44:26.167 回答
0

类似于Abdus Salam Azad answer,但将数组作为参数从 //https://love2dev.com/blog/javascript-remove-from-array/ 传递

function arrayRemove(arr:[], value:any) { 
    
    return arr.filter(function(ele){ 
        return ele != value; 
    });
}
于 2021-12-07T06:30:24.370 回答