综述:数据结构和算法对于前端人员来说很重要,特别是较大的公司,将长见的问题做一个总结,巩固自己的知识
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.排序相关方法汇总?