javascript - 是否可以操作 Array.prototype.map() 的索引参数?
问题描述
我想知道在使用 map 函数时删除数组中的元素后是否可以执行“索引--”。
例子:
arr.map((item, index) => item >= a && item <= b? item : arr.splice(index, 1));
删除该索引处的元素后,下一次迭代的索引需要为“index - 1”。是否有可能以某种方式操纵地图函数中的索引?
解决方案
没有任何优雅的方式。更好的选择是完全避免splice
,而是仅使用数组方法返回的新数组,丢弃旧数组。
如果要删除 and 之间的项目a
,请b
使用.filter
:
const itemsNotBetweenAAndB = arr.map(item => item >= a || item <= b);
如果您必须使用 splice 来改变现有数组(我建议不要这样做,因为它丑陋且不纯),请使用for
循环:
for (let i = arr.length - 1; i >= 0; i--) {
if (arr[i] > a && arr[i] < b) {
arr.splice(i, 1);
}
}
.map
应该仅用于基于转换原始数组的所有元素来创建新数组。从这里开始,您似乎想从原始数组中删除.map
元素而不转换每个项目,这是不合适的,因为它不会帮助您实现目标。
推荐阅读
- django - Django ORM:使用条件计算相关字段中的单个条目
- angular - 使用角度 6 从谷歌地址 api 获得响应后无法提供服务
- nginx - 使用#params 重写url 以使用nginx 查询参数
- angular - 导入服务器状态后的角度通用,@ngrx/store/update-reducers 操作擦除存储
- r - 相异矩阵的clusplot,如何列出组件?
- jquery - 使用 jQuery 向 div 类添加十进制值
- amazon-web-services - 后端 awsmobile 项目创建错误
- json - 删除 json 编码结果中的双引号(PHP)
- php - yii2 codeception 不会创建覆盖率报告
- cursor - A-frame:在桌面上强制融合控件