У мене є масив, який я створив у TypeScript, і він має властивість, яку я використовую як ключ. Якщо у мене є цей ключ, як я можу видалити з нього предмет?
У мене є масив, який я створив у TypeScript, і він має властивість, яку я використовую як ключ. Якщо у мене є цей ключ, як я можу видалити з нього предмет?
Відповіді:
Так само, як і в JavaScript.
delete myArray[key];
Зауважте, що це встановлює елемент undefined
.
Краще використовувати Array.prototype.splice
функцію:
const index = myArray.indexOf(key, 0);
if (index > -1) {
myArray.splice(index, 1);
}
indexOf
повернення number
?
index
не раз використовуєте місце, і одне з цих місць ( splice
) хоче побачити номер, або ви отримаєте помилку. Наразі компілятор не може перешкодити вам помилитися там.
var index = myArray.findIndex(x => x.prop==key.prop);
.
delete myArr[2]
буквально видаляє властивість 2
з myArr
, яке також відрізняється myArr[2] = undefined
. Мораль цієї історії полягає в тому, щоб просто використовувати splice
для цього завдання, оскільки це безпечний спосіб отримати бажаний ефект, не плутаючи побічні ефекти.
Якщо масив - це тип об’єктів, то це найпростіший спосіб
let foo_object // Item to remove
this.foo_objects = this.foo_objects.filter(obj => obj !== foo_object);
this.foo_objects = this.foo_objects.filter(obj => obj !== foo_object)[0];
deleteById(id: string) { this.data = this.data.filter(d => d.id !== id); }
Просто одне слово попередження, якщо ID-коди не унікальні, ви видалите все те самеid
За допомогою ES6 ви можете використовувати цей код:
removeDocument(doc){
this.documents.forEach( (item, index) => {
if(item === doc) this.documents.splice(index,1);
});
}
Це моє рішення для цього:
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();
}
Ви можете використовувати 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"]
нехай відділи - це масив. Ви хочете видалити елемент з цього масиву.
departments: string[] = [];
removeDepartment(name: string): void {
this.departments = this.departments.filter(item => item != name);
}
Ось простий один вкладиш для видалення об'єкта за властивістю з масиву об’єктів.
delete this.items[this.items.findIndex(item => item.item_id == item_id)];
або
this.items = this.items.filter(item => item.item_id !== item.item_id);
Відповідь за допомогою оператора розширення 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;
Ще одне рішення за допомогою Typescript:
let updatedArray = [];
for (let el of this.oldArray) {
if (el !== elementToRemove) {
updated.push(el);
}
}
this.oldArray = updated;
Використовуйте це, якщо вам потрібно видалити заданий об'єкт із масиву, і ви хочете бути впевнені в наступному:
const objWithIdToRemove;
const objIndex = this.objectsArray.findIndex(obj => obj.id === objWithIdToRemove);
if (objIndex > -1) {
this.objectsArray.splice(objIndex, 1);
}
var index: number = myArray.indexOf(key, 0);