视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
js教程-数组循环删除错误实现与解决方案
2020-11-27 19:32:42 责编:小采
文档


问题描述

简单的需求,要删除数组中不符合条件的元素。

错误实现

最初的实现,foreach循环,发现就是不对。

// 如果学科存在id
if (discipline.id) {
 // foreach类别
 angular.forEach(result, function(value, key) {
 // 如果该类别有对应学科(考虑到“请选择的情况下”会报从undefined上获取id)
 // 并且该学科类别id不等于传入学科id
 if (value.discipline && !angular.equals(value.discipline.id, discipline.id)) {
 // 移除不符合要求的元素
 result.splice(key, 1);
 }
 });
}

每次删除时,都是根据key进行删除的,但是删除之后,数组的长度就会发生变化,导致下次再根据key去删除,发现长度变了,我们想删除的元素的位置也变了。

解决方案

Java中,我们使用iterator方法拿到其迭代对象,然后对其进行修改。

// 如果学科存在id
if (discipline.id) {
 /**
 * 数组过滤
 * 接收一个函数,根据该函数返回为true/false
 * 决定该元素保留还是删除
 */
 result = result.filter(function(value) {
 // 兼容请选择项,默认保留
 if (!value.discipline) {
 return true;
 }
 // 保留器具类别的学科id与当前学科id相同的项
 return angular.equals(value.discipline.id, discipline.id);
 });
}

相关文章:

JavaScript中关于for循环删除数组元素内容时出现的问题

一个关于数组循环的问题

下载本文
显示全文
专题