JavaScript 数组去重
用 ES5
用 indexOf 的常规操作
function unique(arr) { var n = []; //一个新的临时数组 for (var i = 0; i < arr.length; i++) //遍历当前数组 { //如果当前数组的第i已经保存进了临时数组,那么跳过, //否则把当前项push到临时数组里面 if (n.indexOf(arr[i]) == -1) n.push(arr[i]); } return n; }; var arr=[1, 2, 1, 1, '1']; console.log(unique(arr)); //[1, 2, "1"]
原理:建一个空的临时数组,遍历传进来的参数(数组),并用临时数组.indexOf对数组的每一个值做判断,等于 -1表示临时数组没有这个值且收下这个值,否则表示已经有一个这个值了,拒收。最后临时数组就是我们要的去重后的数组。
稍微优化一下
Array.prototype.unique = function() { var n = []; for (var i = 0; i < this.length; i++) { if (n.indexOf(this[i]) == -1) n.push(this[i]); } return n; }; var arr=[1, 2, 1, 1, '1']; console.log(arr.unique()); //[1, 2, "1"]
备注:
①Array.prototype 属性表示 Array 构造函数 [] 的原型,也就是 [] 是 Array 的一个实例, 所以本例子中 arr 继承了 Array.prototype 的 unique 方法,且 unique 方法的 this 指向 arr。
用 ES6
常规操作
function unique(array) { return Array.from(new Set(array)); } var array = [1, 2, 1, 1, '1']; console.log(unique(array)); // [1, 2, "1"]
备注:
- Array.from() 方法从一个类似数组或可迭代对象中创建一个新的数组实例。
- ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
长这样
极简操作
var unique = (a) => [...new Set(a)] var array = [1, 2, 1, 1, '1']; unique(array)
备注:
① 扩展运算符(spread)是三个点(...)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列 数组的扩展
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论