日常问题汇总
2018-04-27 19:16 孤独大兔子 阅读(107) 评论(0) 收藏 举报1、如何判断一个数组是否指向了同一个地址
其实当时想多了,直接全等就好了
他们比较的是地址。
2、null与undefined是否全等

3、利用filter数组去重(去除重复元素依靠的是indexOf总是返回第一个元素的位置,后续的重复元素位置与indexOf返回的位置不相等,因此被filter滤掉了)
var arr = ['apple', 'strawberry', 'banana', 'pear', 'apple', 'orange', 'orange', 'strawberry'];
var r = arr.filter(function (element, index, self) {
return self.indexOf(element) === index;
});
r
3.1、简单的数组去重方法 ES6
var b=[...new Set(['apple', 'pear', 'apple', 'orange', 'orange', 'strawberry'])];
3.2 reduce去重
var arr = [1, 2, 3, 3, 4, 2] var newArr = arr.reduce((pre, cur) => { if (!pre.includes(cur)) { return pre.concat(cur) } else { return pre } }, []) newArr
var arr = [{ id: 1 }, { id: 2 }, { id: 3 }, { id: 7 }, { id: 12, c: 1 }, { id: 1, c: 3 }, { id: 2 }]; var obj = {} var newArr = arr.reduce((pre, cur) => { obj[cur.id] ? '' : obj[cur.id] = true && pre.push(cur); return pre }, []) newArr;
4、利用filter判断一个数组内的素数
function get_primes(arr) {
var i;
return arr.filter(function (element) {
var flag=true;
if(element<2){
flag=false;
}else {
for(var i=2;i<element;i++){
if (element%i==0){
flag=false;
break;
}
}
}
return flag;
});
}
// 测试:
var x,r,arr = [];
for (x = 1; x < 100; x++) {
arr.push(x);
}
r = get_primes(arr);
console.log(r)
5、伪类和伪元素的区别
伪类 :hover、:focus、:link...
伪元素 ::after、::before 等。
6、实现单行省略和多行省略
单行: overflow: hidden;text-overflow: ellipsis;white-space: nowarp;
多行:比较靠谱简单的做法就是设置相对定位的容器高度,用包含省略号(…)的元素模拟实现
p { position:relative; line-height:16px; /* 3 times the line-height to show 3 lines */ height:32px; overflow:hidden; } p::after { content:"..."; position:absolute; bottom:0; right:0; }
另外可以用js来实现
7、如何判断是否是一个数组
方法一: arr.constructor.name==="Array"
方法二:arr instanceof Array
方法三:Object.prototype.toString.call(arr)==="[object Array]");
8、自己实现一个filter方法
Array.prototype.filter = function(cb, context){ context = context || this; //确定上下文,默认为this var len = this.length; //数组的长度 var r = []; //最终将返回的结果数组 for(var i = 0; i < len; i++){ if(cb.call(context, this[i], i, this)){ //filter回调函数的三个参数:元素值,元素索引,原数组 r.push(this[i]); } } return r; };
9、用addEventListener实现点击
<body>
<ul id="ul1">
<li>111</li>
<li>222</li>
<li>333</li>
<li>444</li>
</ul>s
</body>
</html>
<script>
window.onload = function(){
var oUl = document.getElementById("ul1");
var aLi = oUl.getElementsByTagName('li');
oUl.addEventListener('click',function(e){
var e = e||window.event;
var p = e.target.parentNode;
var tags = p.getElementsByTagName('*');
for(var i=0,len=tags.length;i<len;i++){
// 找到节点,返回下标
if(tags[i] == e.target){
console.log(i); //下标
return i;
}
}
})
}
</script>
10、实现对数组进行乱序
var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], sign = 1; a.sort(function(a, b) { //因为Math.random产生的数在0-1之间 //所以0.5两边的概率是相等的 //大于0.5时为升序,小于0.5时为降序 sign = (Math.random() > 0.5) ? 1 : -1; return (a - b) * sign; });
//可省略为
arr.sort(function(a, b){return Math.random() - 0.5});
11、计算数组中每个元素出现的次数
var names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice']; var countedNames = names.reduce(function (allNames, name) { if (name in allNames) { allNames[name]++; } else { allNames[name] = 1; } return allNames; }, {}); countedNames
12、将二维数组变成一维数组
var flattened = [[0, 1], [2, 3], [4, 5]].reduce( function(a, b) { return a.concat(b); },[]); flattened
13、阻止事件冒泡以及默认行为
//js阻止事件冒泡 //oEvent.cancelBubble = true; //oEvent.stopPropagation(); //js阻止链接默认行为,没有停止冒泡 //oEvent.preventDefault(); //return false;
14、重写jquery的ajax方法,统一增加请求头
(function($){ var _ajax=$.ajax; $.ajax=function(opt){ opt.headers = $.extend(opt.headers,{'setCnahu121233123':'--------------------ok----------------'}); return _ajax(opt); }; })(jQuery);
15、创建随机固定数量的数组
function getArr({len,min,max}) { let arr = []; let index=0; while(index<len) { index++ arr.push(min+Math.floor((max-min+1)*Math.random())) } return arr; } var arr = getArr({len:10000000,min:0,max:10000000});
16、找出数组中最大值
方法一 var arr = [1,5,66,184,97,25,34,85,32,46]; arr.sort((a,b)=> a-b)[0]; 方法二 var arr = [1,5,66,184,97,25,34,85,32,46]; var sum = 0; for(var i=0;i<arr.length;i++) { arr[i]>sum? sum=arr[i]:sum; } sum 方法三 var arr = [1,5,66,184,97,25,34,85,32,46]; Math.max.apply(null,arr); 方法四 var arr = [1,5,66,184,97,25,34,85,32,46]; Math.max.call(null,...arr);
17、判断对象中是否有某属性
var obj = {name : 'lzhe'} 方法一 test.name; //"lzhe" test.age; //undefined Obj.x !== undefined; //可以进行判断 方法二 'name' in obj; //true 'age' in obj; //true 方法三 obj.hasOwnProperty('name'); //true obj.hasOwnProperty('age'); //false
@
浙公网安备 33010602011771号