var a = [{x:1}, {y:1}, {z:3}]; var b = a.concat(['gg', 'ff']); var c = []; c.push(a[1]); console.log(a[1] === b[1]); console.log('--------'); console.log( c[0]=== a[1] ); 可以看到,数组的concat方法并没有在内存中重新开辟区域存数组a的三个对象,仅仅是指向a里三个对象的指针,数组的大多数原生方法都是如此,操作地址指针.…
js数组去重,老生长谈,今天对其进行一番归纳,总结出来4种方法 贴入代码前 ,先对浏览器Array对象进行支持indexOf和forEach的polyfill Array.prototype.indexOf = Array.prototype.indexOf || function(item) { for (var i = 0, j = this.length; i < j; i++) { if (this[i] === item) { return i; } } return -1; } Ar…
其实网上已经有很多js数组的去重方法,但是我看了很多篇并自己通过代码验证,发现都有一些缺陷,于是在研究多篇代码之后,自己总结了9种方法,如果有哪里不对请及时纠正我哈~ 转载请表明出处 测试代码 let arr1 = [3, 1, [1], 1, [1], true, true, {}, '1', NaN, undefined, NaN, undefined, {}, null, null]; let arr2 = []; for (let i = 0; i < 100000; i++) { ar…
本文简单解析各种数组和对象属性的遍历方法: 原生for循环.for-in及forEach ES6 for-of方法遍历类数组集合 Object.key()返回键名的集合 jQuery的$.each() underscore的_.each() 文中的范例基于以下数组和对象. var arrTmp = ["value1","value2","value3"]; var objTmp = { aa:"value1", bb:&quo…
       去重是开发中经常会碰到的一一个热点问题,不过目前项目中碰到的情况都是后台接口使用SQL去重,简单高效,基本不会让前端处理去重.那么前端处理去重会出现什么情况呢?假如每页显示10条不同的数据,如果数据重复比较严重,那么要显示10条数据,可能需要发送多个http请求才能够筛选出10条不同的数据,而如果在后台就去重了的话,只需一次http请求就能够获取到10条不同的数据.       这次主要介绍几种常见的数组去重的方法.方法1 实现 双循环去重 双重for (或while )循环是比较…
1.push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度. 1).语法: arrayObject.push(newelement1,newelement2,....,newelementX) 参数 描述 newelement1 必需.要添加到数组的第一个元素. newelement2 可选.要添加到数组的第二个元素. newelementX 可选.可添加多个元素. 2).返回值: 把指定的值添加到数组后的新长度. 3).说明: push() 方法可把它的参数顺序添加到 arrayO…
JS高级---构造函数,通过原型添加方法,原型的作用: 共享数据, 节省内存空间 构造函数 //构造函数 function Person(sex, age) { this.sex = sex; this.age = age; } 通过原型添加方法 //通过原型添加方法 Person.prototype.sayHi = function () { console.log("打招呼,您好"); }; 通过console.dir来观察和对比per和Person,可以看出: 实例对象中有个属性…
数组 一.定义数组 * 字面量方式  var 数组名称 = [ value,value,... ] * 构造函数方式 var 数组名称 = new Array(value,value,...):  var 数组名称 = new Array(length) 创建对象方式创建数组分析图   附:var num1 = 100; // number            var num2 = new Number(100); // object var str1 = 'string'; // strin…
关于数组的一些操作方法小结: pop(),push(),shift(),unshift()四个方法都可改变数组的内容以及长度: 1.pop() :删除数组的最后一个元素,并返回被删除的这个元素的值: 2.shift() :将数组的第一个元素删除,并返回这个元素的值: PS:当数组为空时,则这两个方法的返回值为undefinded var arr=[1,2,3]; arr.pop(); alert(arr); //3 arr.shift(); alert(arr); //1 3.push() :向…
1.length 数组长度 计算数组的长度 var arr=[1,2,3,4,5]; console.log(arr.length);//输出结果是5 2. push() 添加元素 向数组尾部添加新元素,返回值是数组的新长度 var arr=[1,2,3,4,5]; console.log(arr.push(6,7));//输出结果是7 console.log(arr);//输出结果是[1,2,3,4,5,6,7] 3. pop() 删除元素 删除并返回最后一个元素 var arr = [1,…
面试前端必须准备的一个问题:怎样去掉Javascript的Array的重复项, 这个问题看起来简单,但是其实暗藏杀机. 考的不仅仅是实现这个功能,更能看出你对计算机程序执行的深入理解. 我总共总结4种算法来实现这个目的: Array.prototype.unique1 = function() { var n = []; //一个新的临时数组 for(var i = 0; i < this.length; i++) //遍历当前数组 { //如果当前数组的第i已经保存进了临时数组,那么跳过, /…
1.遍历数组法 最简单的去重方法, 实现思路:新建一新数组,遍历传入数组,值不在新数组就加入该新数组中:注意点:判断值是否在数组的方法“indexOf”是ECMAScript5 方法,IE8以下不支持,需多写一些兼容低版本浏览器代码,源码如下: // 最简单数组去重法 function unique1(array){ var n = [ ]; //一个新的临时数组 //遍历当前数组 for(var i = 0; i < array.length; i++){ //如果当前数组的第i已经保存进了临…
第一种是比较常规的方法 思路: 1.构建一个新的数组存放结果 2.for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组对比 3.若结果数组中没有该元素,则存到结果数组中   Array.prototype.unique1 = function(){ var res = [this[0]]; for(var i = 1; i < this.length; i++){ var repeat = false; for(var j = 0; j < res.length; j++){ if…
一万数组,4个重复项,先贴上成绩. 1.3毫秒 2.115毫秒 3.71毫秒 4.6毫秒 1.哈希表 2.JQuery (最快的方法是用JQuery 这句话是截图带的... 实际上Jq是最慢的) 3.indexOf 4.es6 es7 测试代码 var num = [1221,494,5840,7017,5431,201,6518,5841,2430,2820,2100,5729,9112,8822,803,6279,3935,4877,897,4405,7973,9305,9657,6949,…
<script> let arr = [2, 3, 4, 2, 3, 4]; // 数组转化为对象 function toObject(arr) { let obj = { } for(let i = 0; i < arr.length; i++) { obj[arr[i]] = true; } return obj; } // 对象转化为数组 function toArray(obj) { let arr = []; for(let k in obj) { if(obj.hasOwnP…
方法一: Array.prototype.unique=function(){ var arr=[];//新建一个临时数组 for(var i=0;i<this.length;i++){//遍历当前数组 if(arr.indexOf(this[i])==-1){//当前数组的第i个值在新数组中找不到,则添加到新数组中去 arr.push(this[i]); } } return arr; }; 方法二: Array.prototype.unique=function(){ var arr=[];…
数组和字符串有很多相似的对方,比如数组和字符串都有以下方法: concat indexOf lastIndexOf slice includes 鉴于toString及valueOf方法基本类型都有,这里就不做过多介绍了 1.数组中indexOf和较数组中includes的比较 看函数的返回值:indexOf返回的是数值型的而includes返回的是布尔型的 都可以支持第二参数,而且的第二个参数都支持负数形式 数组中的indexOf不能判断数组中是否有NaN而includes可以 1.1 ind…
<script type="text/javascript"> /*// 第一种冒泡法删除 var arr=[1,2,2,78,3,456,456]; for(var i=1;i<=arr.length;i++){ for(var j=i+1;j<=arr.length;j++){ if(arr[i]==arr[j]){ arr.splice(i,1); } } } document.write(arr);*/ // document.write("方…
Array.prototype.unique1 = function () { var n = []; //一个新的临时数组 for (var i = 0; i < this.length; i++) //遍历当前数组 { //如果当前数组的第i已经保存进了临时数组,那么跳过, //否则把当前项push到临时数组里面 if (n.indexOf(this[i]) == -1) n.push(this[i]); } return n; }; Array.prototype.unique2 = fu…
第一种:双重循环 var strCode='zxcvbnmasdfghjklopiuytrewqAWEDRFTGYHUJIK'; var str=''; for(var i=0;i<4;i++){ var rand=Math.round(Math.random()*61); if(str.indexOf(strCode.charAt(rand))==-1){ str+=strCode.charAt(rand); }else{ i--; } } console.log(str); 第二种:新数组 …
选定元素slice() slice() 方法可从已有的数组中返回选定的元素. 语法 arrayObject.slice(start,end) 参数说明: 1.返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素. 2. 该方法并不会修改数组,而是返回一个子数组. 注意: 1. 可使用负值从数组的尾部选取元素. 2.如果 end 未被规定,那么 slice() 方法会选取从 start 到数组结尾的所有元素. 3. String.slice() 与…
1:array.join 用于将数组中的所有元素转化为字符串 例: var arr = ["one", "two", "four"]; var array; array = arr.join(",");   //字符串分格符,如果你不想要分隔符可以不写或者写undefined console.log(array);   //one,two,four 这个在处理一些后端传的数据时有时候很有用 2:array.from 作用:Ar…
push 和 arr[i] 遍历 var arr = new Array(); $(":check").each(function(i){if(this.checked==true){ arr.push($(this).val()); } }); var str = arr.join(','); alert(str); //,,,,14,15 var arr = new Array(); $(".ctr").each(function(i){ //alert(thi…
<script type="text/javascript"> // arr代表数组,index代表下标 function lihua(arr, index){ arr[index] += arr[index + 1]; arr[index + 1] = arr[index] - arr[index + 1]; arr[index] -= arr[index + 1]; } function bus(arr, asc){ for(var n = 1; n < arr.…
var arr=[1,1,2,2,3,5,2];function uniqueArr(arr){ var data=[]; for(var i=0;i<arr.length;i++){ if(data.indexOf(arr[i])<0){ data.push(arr[i]); } } return data;}console.log(uniqueArr(arr));var arr1=[1,2,2,5,5,4,5,6,3,36,52];function uniquearr(arr){ var…
1, sort() 不传回调函数的话,默认按照字母顺序(字符编码)的顺序进行排序. 2, sort() 通过传回调函数来控制从小到大的排序还是从大到小的排序: var arr = [1,23,5,6,14,9,10]; arr.sort((a,b)=>{ if(a>b){ return 1; }else { return -1; } }) console.log(arr); 结果:[1, 5, 6, 9, 10, 14, 23] 从小到大 var arr = [1,23,5,6,14,9,10…
1.数组添加删除 头部或尾部( push().pop().unshift().shift() ) 例2.数组尾部添加 push()方法可向数组的末尾添加一个或多个元素,并返回新的长度 语法:arrayObject.push(newelement1,newelement2,….,newelementX) btn[2].onclick = function(){ var arr = [1,2,3,4,5] arr.push(6) alert(arr) //1,2,3,4,5,6 }//尾部添加一个元…
js数组去重复几种方法 第一种:也是最笨的吧. Array.prototype.unique1 = function () { var r = new Array(); label:for(var i = 0, n = this.length; i < n; i++) { for(var x = 0, y = r.length; x < y; x++) { if(r[x] == this[i]) { continue label; } } r[r.length] = this[i]; } re…
这个老问题,网上普遍都有了,为什么要再写一遍呢,主要是为了记个笔记... 遍历时搜索结果数组 思路很明确,如下 新建一个数组存放结果 循环遍历原数组,对于每一个元素,在结果数组中搜索是否存在 若不存在则存入结果数组中,返回第二步,直到循环结束 代码就不上了,网上一大把. 这是最直接的方法,但由于嵌套了循环,效率不高. 先排序后比较 先将原数组进行排序 新建一个结果数组 遍历排序后的数组,比较第i个元素与结果数组的最后一个元素是否相等 如果不相等则存入结果数组 同不上代码. 速度是快了些,但返回的…
本文介绍JS数组一些比较进阶的方法: reverse:数组反转: join:(参数)以参数为连接符将数组拼接为字符串: 实例: var arr=[]; arr[3]="haha"; console.log(arr.join("a"))://输出:aaahaha;    arr[3]实际上定义了数组长度为4且前3项都为undifided, 因此join("a")则为:空 +a+空+ a 空+ a+ haha 配合字符串split方法实现字符串反转:…