javascript - 通过索引删除几个数组元素并存储删除的元素
问题描述
如何按索引删除多个项目并保存已删除的项目。我从 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"]
注意:数组的长度可能非常大。
解决方案
A.filter
有一个.includes
内部是O(n ^ 2)
。对于非常大的输入,这可能是一个问题。考虑将 转换elementsToMove
为 Set,将整体计算复杂度转换为O(n)
. 您还可以通过使用而不是后跟来elementsToMove
更简洁地构造数组:.map
forEach
push
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);
推荐阅读
- asp.net-core - 用户登录失败
在生产中,但本地客户端使用相同的连接字符串 - html - 表 TD 包装(错误)行为?
- typescript - 类型 'T' 不满足约束 'string | 号码 | 象征'。类型“T”不可分配给类型“符号”
- google-apps-script - 在谷歌卡中插入谷歌图表
- python - 带有 Click 命令别名的常规用法输出
- selenium - Jenkins 中的范围报告显示附加屏幕截图的空白图标
- android - Flutter/Dart:如何向 TextFormField 等单选按钮添加验证?
- mysql - MySQL程序不会插入任何数据,但它之外的查询可以工作
- spring-boot - 在 ConsumerConfig 中添加 kafka autoStartUp false
- ios - 无法在swiftUI中显示来自url的图像