前几天碰到一个题目,要求是这样的. 题目描述 为 Array 对象添加一个去除重复项的方法 示例1 输入 [false, true, undefined, null, NaN, 0, 1, {}, {}, 'a', 'a', NaN] 输出 [false, true, undefined, null, NaN, 0, 1, {}, {}, 'a'] es5代码 它的在线编辑器只支持es5, 所以写下了一长串代码 Array.prototype.uniq = function () { var i…
php中数组去重的小例子.  代码如下: <?php   /** * 数组去重复的小函数 * by www.jbxue.com */     function assoc_unique($arr, $key) {            $tmp_arr = array();            foreach($arr as $k => $v) {                if(in_array($v[$key], $tmp_arr)) {                    uns…
[1,2,3,4,5,6,7,8,9,2,2,3,3,4,1].filter(function(el,index,arr){ return (index === arr.indexOf(el)); })…
var zz = [1,2,3,5,5,7,8,6,6]; var se = []; d(se); function d(attr){ for(var i = 1;i<zz.length;i++){ if(se.indexOf(zz[i])<0){ se.push(zz[i]); } } document.write(se) }…
数组去重方法1:用es6的set和...扩展运算符 let arr = [1,2,3,4,4,5,2]; console.log([...new Set(arr)]) // [1, 2, 3, 4, 5] ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. const s = new Set(); [2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x)); for (l…
最近比较忙,没时间更新博客,等忙完这阵子会整理一篇使用AngularJS构建一个中型的单页面应用(SPA)的文章,尽情期待!先占个坑. 数组去重的算法有很多种,以下是一种. 思路如下: 定义一个空的对象obj: 循环数组arr,判断obj[arr[i]]是否为false,如果是则将该数组元素放到result中,并且将obj[arr[i]]置为true: obj[arr[0]]肯定为false,因为obj为空,arr[0]将被放到result中,并且obj[arr[0]]被置为true: 循环的过…
使用new Set()快速数组去重: let arr = [1, 2, 2, 3, 4, 5, 5, 5, 6] let set = new Set([...arr]) console.log([...set]) //[1, 2, 3, 4, 5, 6] function SetArr(array) { return Array.from(new Set(array)); } console.log(SetArr([1, 1, 2, 2, 3, 4, 4])) // [1, 2, 3,4]…
说明 JavaScript数组去重这个问题,经常出现在面试题中,以前也写过一篇数组去重的文章,(JavaScript 数组去重的多种方法原理详解)但感觉代码还是有点不够简单,今天和大家再说两种方法,代码可是足够的少了. 解释 方法一: function unique(arr) { const res = new Map(); return arr.filter((a) => !res.has(a) && res.set(a, 1)) } 就这么短,就可以了,我们来解释一下为什么. M…
一种新的数据类型,它是对象的一种,Set,很像数组,又不是数组. Set 类型 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Set Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用. 如果里面有重复的会自动去重.set可以理解为去重之后的数组,永远不允许有重复的元素存在. 无论是原始值还是对象引用 如果有重复的字符串,也会去重. null和undefined也会…
今天五一,在出去玩之前赶紧写篇博客,时刻不要忘记学习^_^!! 提到数组去重,想必大家都不陌生,会的同学可能噼里啪啦写出好几个,下面来看看之前常见的去重代码: 'use strict'; var arr = [1,'a',undefined,null,NaN,1,'a',undefined,null,NaN]; Array.prototype.remDub = Array.prototype.remDub || function(){ this.sort(); var arr = [this[0…
ES6中新增了Set数据结构,类似于数组,但是 它的成员都是唯一的 ,其构造函数可以接受一个数组作为参数,如: let array = [1, 1, 1, 1, 2, 3, 4, 4, 5, 3]; let set = new Set(array); console.log(set); // => Set {1, 2, 3, 4, 5} ES6中Array新增了一个静态方法Array.from,可以把类似数组的对象转换为数组,如通过querySelectAll方法得到HTML DOM Node…
PHP数组合并和去重的函数有哪些 一.总结 一句话总结:合并:array_merge() array_merge_recursive() +号:去重:array_flip() array_unique() array_merge() array_merge_recursive() +号 array_flip() array_unique() 1.array_merge和+以及array_merge_recursive数组合并时对相同的字符串索引的操作是怎样的? +前面的覆盖后面的 array_m…
1.如何装逼用代码骂别人傻逼 (!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]] 2.如何优雅的用代码证明自己NB ([][[]]+[])[+!![]]+([]+{})[!+[]+!![]] 3.匿名函数自执行 ( function() {}() ); ( function() {} )(); [ function() {}() ]; ~ function() {}(); ! function() {}()…
较常见的一问题:数组去重. 方法一:利用hash数组的原理 var arr=[1,3,3,4,5,5,6,6,7,8,69,8,99,9,0,]; function unique(arry){ var newArry=[]; for(let i=0;i<arr.length;i++){ if(!newArry[arr[i]]){ newArry[arr[i]]=arr[i]; } } return newArry; } console.log(unique(arr)); 方法二:indexOf方…
ES6中新增了Set数据结构,类似于数组,但是 它的成员都是唯一的 ,其构造函数可以接受一个数组作为参数,如: let array = [1, 1, 1, 1, 2, 3, 4, 4, 5, 3]; let set = new Set(array); console.log(set); // => Set {1, 2, 3, 4, 5} ES6中Array新增了一个静态方法Array.from,可以把类似数组的对象转换为数组,如通过querySelectAll方法得到HTML DOM Node…
一.Set 1.定义 Set对象是ES6中新定义的数据结构,类似于数组,它允许你存储任何类型的唯一值,不管是原始值还是对象引用. 2.语法 new Set([iterable]) iterable:可迭代对象,默认为空. Set方法 add:添加值,返回Set本身. delete:删除值,返回是否删除成功. has:判断是否拥有这个值,返回true/false. clear:清除所有值. 3.示例 let s = new Set(); s.add(4); s.add(1); s.add(3);…
数组去重(要求:原型链上添加函数) <script> //数组去重,要求:在原型链上添加函数 //存储不重复的--仅循环一次 if(!Array.prototype.unique1){ Array.prototype.unique1=function(){ var item , hash={}, len=this.length, result=[]; for(var i = 0 ; i < len ; i++){ item = this[i]; if(!hash[item+Object.…
ES6,ES5数组去重 使用Es6进行数组去重 var arr = [false, true, undefined, null, NaN, 0, 1, {}, {}, 'a', 'a', NaN]; var set = new Set(arr); var uniqArr = Array.from(set) 因为NaN == NaN会返回,false,Es6不用区分这一点 使用Es5进行数组去重 Array.prototype.uniq = function() { var arr = []; v…
ES6里新添加了两个很好用的东西,set和Array.from. set是一种新的数据结构,它可以接收一个数组或者是类数组对象,自动去重其中的重复项目. 在这我们可以看见,重复的项目已经被去掉了,包括NaN.正常情况下,NaN === NaN 返回的是false,但是在set里,一样能够帮你去重,厉害了. 但是这里大家可以看到,set返回的是一个对象,但是我们想要的是数组啊. 这回,就该轮到Array.from出场了,它的作用,就是可以把类数组对象.可迭代对象转化为数组. 这回我们再看,已经变成…
原型链 例子如下: var arr = [1, 2, 3]; 其原型链为:arr ----> Array.prototype ----> Object.prototype ----> null 同理我们创建一个函数也是: function foo() { return 0; } 其原型链为:foo ----> Function.prototype ----> Object.prototype ----> null 由于Function.prototype定义了apply…
并集: const arr1 = [1, 2, 3, 2, 5]; const arr2 = [1, 4, 6, 8, 3]; // 将两个数组合并 const concatArr = [...arr1, ...arr2]; // 对数组去重 const set = new Set(concatArr); const newArr = [...set] 交集: const arr1 = [1, 2, 3, 2, 5]; const arr2 = [1, 4, 6, 8, 3]; const se…
原文链接:https://juejin.im/post/5b17a2c251882513e9059231 1,去除简单类型   //ES6中新增了Set数据结构,类似于数组,但是 它的成员都是唯一的 ,其构造函数可以接受一个数组作为参数,如:   let array = [1, 1, 1, 1, 2, 3, 4, 4, 5, 3];   let set = new Set(array);   console.log(set);   // => Set {1, 2, 3, 4, 5}      …
自从有了es6的set数据结构,数组的去重可以简单用一行代码实现,比如下面的方式 let arr = [1, 2, 2, 3, 4] function unique (arr) { return [...new Set(arr)] } console.log(unique(arr)) // [1, 2, 3, 4] 但是当数组的项不再是简单的数据类型时,比如是对象时,这种方法就会导致错误,比如下面的结果 let arr = [ { name: 'a', num: 1}, { name: 'b',…
Function.prototype.call = function(context,...args){ var context = context || window; context.fn = this; var result = eval(`context.fn(...args)`); delete context.fn; return result; } call的实质就是调用函数时候改变函数中this的指向,利用对象中函数调用时候 this指向这个对象的特性我们给函数加上fn属性,指向…
//数组去重 function distinct(arr) { let result = []; let obj = {}; for(let i of arr) { if(!obj[i]) { result.push(i); obj[i] = 1; } } return result }…
使用new Set实现数组去重必须结合for of, 如果使用for循环就实现不了 var arr = new Set([1, 2, 1, 1, 2, 3, 3, 4, 4]); for (var el of arr) { console.log(el) }…
Why underscore (觉得这部分眼熟的可以直接跳到下一段了...) 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. 阅读一些著名框架类库的源码,就好像和一个个大师对话,你会学到很多.为什么是 underscore?最主要的原因是 underscore 简短精悍(约 1.5k 行),封装了 100 多个有用的方法,耦合度低,非常适合逐个方法阅读,适合楼主这样的 JavaScript 初学者.从中,你不仅可以学到用…
查看zepto源码时,看到它的数组去重写法非常简单.下面是代码 var uq = function(array){ return [].filter.call(array,function(item,idx){ return array.indexOf(item) == idx }) }uq([1,3,5,1,2,5])输出: [1,3,5,2] 这里用到了array filter方法. 下面再简单介绍一下 filter方法的使用. filter() 方法创建一个新数组, 其包含通过所提供函数实…
随着JavaScript提供语法的增多,数组去重方式也越来越多.现在从最原始的方式到最简洁的方式,一步步进行剖析. 双重循环 数组去重,不就是比较数组元素,去掉重复出现的么.最原始的方式不正是双重循环进行比较处理嘛 创建res数组存放返回结果:外层循环遍历target中的每一个数组元素,内层循环将target中的数组元素与res数组中的每一个值进行对比,如果都不相同,则存放到res中.循环完成,返回去重后的数组.这种原始的方式具有良好的兼容性. indexof优化内层循环 在本栗中使用index…
js数组根据对象中的元素去重: var arr2 = [ { name: "name1", num: "1" }, { name: "name2", num: "11" }, { name: "name3", num: "12" }, { name: "name4", num: "13" }, { name: "name2",…