首页 > 解决方案 > 通过索引删除几个数组元素并存储删除的元素

问题描述

如何按索引删除多个项目并保存已删除的项目。我从 ListBox(例如)中获取当前选定的值selectedValues = [1, 4, 2]并有两个数组actives availables。我尝试以有效的方式移动选定的元素。

这就是我将如何解决这个问题:

var actives = [ "a", "d", "k", "e"]
var availables = [ "m", "o", "v" ]
var selectedValues = [3, 1]
var elementsToMove = []

selectedValues.forEach(i => {
  elementsToMove.push(actives[i])
})

actives = actives.filter(item => !elementsToMove.includes(item))
availables = availables.concat(elementsToMove);

console.log(actives);
console.log(availables);

预期输出:

actives = [ "a", "k" ]
availables = [ "m", "o", "v", "e", "d"] 

注意:数组的长度可能非常大。

标签: javascripttypescript

解决方案


A.filter有一个.includes内部是O(n ^ 2)。对于非常大的输入,这可能是一个问题。考虑将 转换elementsToMove为 Set,将整体计算复杂度转换为O(n). 您还可以通过使用而不是后跟来elementsToMove更简洁地构造数组:.mapforEachpush

var actives = [ "a", "d", "k", "e"]
var availables = [ "m", "o", "v" ]
var selectedValues = [3, 1];
const elementsToMove = selectedValues.map(i => actives[i]);
const elementsToMoveSet = new Set(elementsToMove);

actives = actives.filter(item => !elementsToMoveSet.has(item))
availables = availables.concat(elementsToMove);

console.log(actives);
console.log(availables);


推荐阅读