前几天 有一个需求要做一个 勾选的按钮 ,用的前端框架时 extjs   。

需求是这样的:选择数据后点击勾选 会把数据 放到一个全局变量里,然后点击另外一个提交按钮 弹出一个窗口 加载这些已经勾选的数据,进行预览勾选的数据和提交。

  隐藏的需求之一就是预览的时候不能看到重复的数据,或者说勾选的时候需要去重。

实现如下:

        /**
* 添加勾选的records 并去重
* @param value 勾选的records
*/
pushExternalTickedRecords(value: Ext.data.IModel[]) {
let temp = this.ExternalTickedRecords;
if (temp == null || temp == undefined) {
temp = new Array<Ext.data.IModel>();
}
temp.push(...value);
temp.sort((a: Ext.data.IModel, b: Ext.data.IModel) => {
let aId = a.getData().Id;
let bId = b.getData().Id;
if (aId > bId) {
return 1;
} else if (aId == bId) {
return 0;
} else {
return -1;
}
});
let len = temp.length;
let objId = 0;
for (let i = 0; i < len; i++) {
let curLen = temp.length;
if (i >= curLen) {
break;
}
let curId = temp[i].getData().Id;
if (i != 0) {
if (objId == curId) {
temp.splice(i, 1);
i--;
continue;
}
}
objId = curId;
}
this.ExternalTickedRecords = temp;
}

  注:这个方法是写在一个类里的,语言TSEditer支持的ES6标准。

简单解释一下:首先根据 数据Id进行sort,然后循环这个排序后的 array 使用 splice 和 i-- 进行高性能的去重。

  注:splice 减少数组元素会影响其length 所以 要使用 len变量。如果不使用id 作为 key就要在objId里存储相应的key。objId 更准确的命名应该是 priorObj。

  注:如果不是用 splice 而使用delete 的话 不能做i--并且后面要去除 undefined。

补充:

var ages = [, , , ,,,,,,,,,];

ages.filter((m, index) => ages.findIndex(x => x == m) == index);

3,10,18,20,2,30,1

js 排序,去重的更多相关文章

  1. js数组去重的4种方法

    js数组去重,老生长谈,今天对其进行一番归纳,总结出来4种方法 贴入代码前 ,先对浏览器Array对象进行支持indexOf和forEach的polyfill Array.prototype.inde ...

  2. 排序图解:js排序算法实现

    之前写过js实现数组去重, 今天继续研究数组: 排序算法实现. 排序是数据结构主要内容,并不限于语言主要在于思想:大学曾经用C语言研究过一段时间的排序实现, 这段时间有空用JS再将排序知识点熟悉一遍. ...

  3. JS数组去重的几种常见方法

    JS数组去重的几种常见方法 一.简单的去重方法 // 最简单数组去重法 /* * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中 * IE8以下不支持数组的indexOf方法 * */ ...

  4. js数组去重五种方法

    今天来聊一聊JS数组去重的一些方法,包括一些网上看到的和自己总结的,总共5种方法(ES5). 第一种:遍历数组法 这种方法最简单最直观,也最容易理解,代码如下: var arr = [2, 8, 5, ...

  5. js数组去重的方法(转)

    JS数组去重的几种常见方法 一.简单的去重方法 // 最简单数组去重法 /* * 新建一新数组,遍历传入数组,值不在新数组就push进该新数组中 * IE8以下不支持数组的indexOf方法 * */ ...

  6. JS数组去重的6种算法实现

    1.遍历数组法 最简单的去重方法,实现思路:新建一新数组,遍历传入数组,值不在新数组就加入该新数组中:注意点:判断值是否在数组的方法"indexOf"是ECMAScript5 方法 ...

  7. js数组去重解决方案

    js数组去重是前端面试中经常被问的题目,考察了面试者对js的掌握,解决问题的思路,以及是否具有专研精神.曾经一位前端界大神告诉我,解决问题的方式有很多种,解决问题时多问问自己还有没有其他的方法,探求最 ...

  8. 前端面试手写代码——JS数组去重

    目录 1 测试用例 2 JS 数组去重4大类型 2.1 元素比较型 2.1.1 双层 for 循环逐一比较(es5常用) 2.1.2 排序相邻比较 2.2 查找元素位置型 2.2.1 indexOf ...

  9. JS 数组去重(数组元素是对象的情况)

    js数组去重有经典的 几种方法 但当数组元素是对象时,就不能简单地比较了,需要以某种方式遍历各值再判断是否已出现. 因为: 1.如果是哈希判断法,对象作哈希表的下标,就会自动转换成字符型类型,从而导致 ...

  10. 利用js排序html表格

    在web前端开发中会遇到排序等功能,当然也可以用服务器端来排序,今天我做一个笔记,怎么用js来实现这些复杂的功能呢. 在学习这个之前一定得用html dom jquery 的知识,要不没有办法看明白的 ...

随机推荐

  1. asp.net mvc 学习笔记 - 单一实例设计模式

    学习之前,先喊一下口号:每天进步一点,生活更好一点 首先声明一点,我也是新新新手一枚,崭新的新哦.如果文章有不合理的地方,也请各位博友多多指点,不要乱喷哦 我的文采很低调,低调到语文老师对我的期望是你 ...

  2. TCP长连接的一些事儿

    1.TCP的特点以及与应用        TCP提供一种面向连接的.可靠的字节流服务.面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据包之前必须先建立一个TCP连接.TC ...

  3. POJ 1740(构造博弈)

    题目链接: https://cn.vjudge.net/problem/POJ-1740 题目描述: Alice and Bob decide to play a new stone game.At ...

  4. zoj 2722 Head-to-Head Match(数学思维)

    题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2722 题目描述: Our school is planning ...

  5. DECLARE_MESSAGE_MAP 宏

      此宏描述的头文件位置: afxwin.h 如果在 DECLARE_MESSAGE_MAP之后声明任何成员,则必须为其指定新的访问类型 (公共. private或 protected).说明:定义消 ...

  6. 8.C#知识点:委托和事件

    知识点目录==========>传送门 首先推荐两篇大牛写的委托和事件的博客,写的超级好!看了就包你看会,想学习的朋友直接看这两篇就足以,我自己写的是算是自己学习的纪录. 传送门======== ...

  7. tomcat 防火墙如何设置

    tomcat 防火墙能够有效的防护我们电脑,那么我们要怎么样去设置呢?下面由学习啦小编给你做出详细的tomcat 防火墙设置方法介绍!希望对你有帮助! tomcat 防火墙设置方法一: 1.为tomc ...

  8. Oracle- 复杂查询及总结

    一.复杂查询 1. 列出至少有一个员工的所有部门编号.名称,并统计出这些部门的平均工资.最低工资.最高工资. 1.确定所需要的数据表: emp表:可以查询出员工的数量: dept表:部门名称: emp ...

  9. 基于spring boot 2.x 的 spring-cloud-admin 实践

    spring cloud admin 简介 Spring Boot Admin 用于监控基于 Spring Boot 的应用,它是在 Spring Boot Actuator 的基础上提供简洁的可视化 ...

  10. JS中那些让人头昏眼花的弯子

    看别人在讨论,于是整理了下,大家来看看下面代码中1-11分别输出的答案是什么???(不要试过再说) var obj={ a:1, b:2, add:function(c,d){ console.log ...