在Angular 6项目中,我有一张地图来存储一些值。在文档中,我使用键值管道遍历此映射。这很好。我需要知道的是,当用户单击某个项目时,那么我该如何删除该索引之后的每个后续项目?有没有一种按索引值删除的方法?
我尝试了Map.prototype.clear()
和Map.prototype.delete(key)
。但是我需要按索引而不是键进行删除。
<div *ngFor="let prod of this.wrapperMap | keyvalue; let i = index;">
<li class="breadcrumb-item active" aria-current="page" (click)="selectProductObject(prod.value, i)">{{this.master.productsMap.get(prod.key)['productName']}}</li>
</div>
比方说,我们在地图上有四个项目,一个用户单击第一个索引。然后我们需要删除索引1之后的每个索引。
答案 0 :(得分:0)
我们可以考虑映射中的下一个键,而不是下一个索引(索引+ 1):
function deleteNextKey<K, V>(map: Map<K, V>, key: K): boolean {
const nextKey = getNextKey(map, key);
return nextKey.hasValue && map.delete(nextKey.value);
}
function getNextKey<K, V>(map: Map<K, V>, key: K): { hasValue: true, value: K } | { hasValue: false } {
const keys = [...map.keys()];
const index = keys.findIndex(x => x === key);
return index >= 0 && index < keys.length - 1
? { hasValue: true, value: keys[index + 1] }
: { hasValue: false };
}
const map = new Map<string, string>([
['A', 'Item A'],
['B', 'Item B'],
]);
console.log(deleteNextKey(map, 'Z'), JSON.stringify([...map.entries()])); // false "[["A","Item A"],["B","Item B"]]"
console.log(deleteNextKey(map, 'B'), JSON.stringify([...map.entries()])); // false "[["A","Item A"],["B","Item B"]]"
console.log(deleteNextKey(map, 'A'), JSON.stringify([...map.entries()])); // true "[["A","Item A"]]"