数据结构和算法集合

综述:数据结构和算法对于前端人员来说很重要,特别是较大的公司,将长见的问题做一个总结,巩固自己的知识

1.去重的方法有哪些?越多越好,扩宽自己的知识面?

  • 创建新数组去重法(性能不是非常的好)

var arr=[1,1,1,2,3];
var newArr=new Array();
for(var i in arr){
  if(newArr.indexOf(arr[i])==-1){  //如果新数组中不存在这个元素
      newArr.push(arr[i]);
  }
}
console.log(newArr);
  • 使用es6中的集合Set + Array.from()方法实现去重

Array.from()方法就是将一个类数组对象或者可遍历对象转换成一个真正的数组,set对象并不是一个完整的数组;

var arr=new Set([1,1,1,2,3]);
var newArr=Array.from(arr);
console.log(newArr);    //[1,2,3]
  • es6中的 …[拓展运算符] +Set

拓展运算符:扩展运算符( spread )是三个点(…),将一个数组转为用逗号分隔的参数序列。

var arr=[...new Set([1,1,1,2,3])];  
console.log(arr);      //1,2,3

var arr=[new Set([1,1,1,2,3])];  
console.log(arr);   //1,2,3
  • 将数组中的值以对象属性的方式传给一个对象,如果对象中没有这个属性则将其添加到对象中,仔细分析代码中的问题

//在数组的原型上添加方法
   Array.prototype.unique=function(){
     var arr2=[];
     var obj={};
     for(var i in this){  //这样写返回的数组中就是6个元素,包括函数自身
       /*if(!obj.this[i]){
         arr2.push(this[i]);
         obj.this[i]=1;    //为什么通过这种方式是会出错的
       }*/
       if(!obj[this[i]]){
         arr2.push(this[i]);
         obj[this[i]]=12;  //如果不给默认值有啥影响
       }
     }
     for(var i=0;i<this.length;i++){  //这里返回的就是5个元素
       if(!obj[this[i]]){
          arr2.push(this[i]);
          obj[this[i]]=12;  //如果给值为0或者不给值,则就不会满足!obj[this[i]]这个条件;
        }
     }
      return  arr2;
   };
   var arr=[1,2,1,1,3];
   console.log(arr.unique());  //[1,2,3];

后来在一个网页中查到,原来对象访问属性有两种方式。有一个对象Obj = {"Name":"Langshen","AGE":"28"}

  • 用点访问,Obj.Name ;

  • 用中括号访问,Obj["Name"];

  • 上述两种方式得到的结果都是属性Name的值Langshen;

上面2中访问的方式可以获得同样的效果,是因为对象的属性是已经存在的,这里在延伸一下上述两种方式为对象新建属性时用法的区别。

首先,回到文章的开头。代码o[char] 表示的是o对象的一个属性值。那能不能用o.char表示呢?答案是否定的

详细内容参考链接:https://blog.csdn.net/shuren1991/article/details/67639250

2.排序相关方法汇总?

 

 

 

 

 

 

 

 

 

 

 

 

 

点赞