javascript - Odstranění položky z pole a přidání do jiného pole
Uživateli zobrazuji sérii divů s obsahem a uživatel je schopen div ze stránky odstranit, aby ho již neviděl.
Chtěl bych vzít stejný obsah divu, který byl odstraněn z pole, a přidat ho do jiného pole, které bude použito k naplnění rozbalovacího seznamu.
tohle je to, co mám:
//Remove function
removeCategory(index: number): void {
this.categories.splice(index, 1);
}
//Array
categories: Array<Item> = [
new Item(1, 'test1'),
new Item(2, 'test2')
];
//New Array to add previous removed item
ddoptions: Array<object> = [];
Je možné provést příkaz push před splice ve funkci removeCategory? Nejsem si jistý, co předat, protože když to udělám, dostanu tuto chybu:
this.ddoptions.push(index);
Odpověď č. 1
Aktualizováno pro rok 2020
S novějšími specifikacemi ES můžete také použít operátor destrukturování přiřazení na pole, což znamená, že nemusíte používat concat nebo apply u funkce push v daném kontextu. To vlastně existovalo už v době, kdy jsem to původně psal, ale nyní je mnohem běžnější tomu čelit.
this.ddoptions.push(...this.categories.splice(index, 1));
Nicméně pravidla uvedená níže stále platí, používání push a splice bude měnit existující pole, takže concat by měl být pravděpodobně stále používán, pokud chcete neměnnost.
Původní odpověď
Můžete se přímo zapojit do metody push, protože splice vrací odstraněný objekt.
this.ddoptions.push(this.categories.splice(index, 1)[0]);
Metoda splice ve skutečnosti vrací pole prvků, které byly odstraněny. Ve vašem případě odstraňujete pouze jeden, takže výše uvedený kód funguje. Pokud odstraňujete jeden nebo více prvků, můžete je přidat do druhého pole několika způsoby.
Použitím concat k vytvoření nového pole:
this.ddoptions = this.ddoptions.concat(this.categories.splice(index, 1));
To může způsobit problémy, protože ddoptions už není stejný objekt. Záleží na tom, co děláte a co Angular dělá.
Pole můžete předat jako více argumentů metodě push použitím prototypu push.
[].push.apply(this.ddoptions, this.categories.splice(index, 1));
Tímto způsobem zůstane ddoptions stejným polem a všechny nové prvky do něj budou přidány.
Odpověď č. 2
Array#splice pohodlně vrací pole obsahující odstraněné prvky:
removeCategory (index) {
this.ddoptions.push( this.categories.splice(index, 1)[0] )
}
Zobrazit ukázku TypeScriptu
Ukázka JavaScriptu:
class Item {
constructor(a, b) { return [a, b] }
}
class Example {
removeCategory (index) {
this.ddoptions.push( this.categories.splice(index, 1)[0] )
}
//Array
categories = [
new Item(1, 'test1'),
new Item(2, 'test2')
]
//New Array to add previous removed item
ddoptions = []
}
var example = new Example()
example.removeCategory(1)
console.log(example.ddoptions)