1.快速的让一个数组乱序
var arr = [1,2,3,4,5,6,7,8,9,10];
arr.sort(function(){ return Math.random-0.5 }) //无规则排序
arr.sort(function(a,b){ return a-b }) //从小到大
arr.sort(function(a,b){ return b-a }) //从大到小
2.更短的数组去重写法
// 1.去除数组的重复成员(es6新增)
[...new Set(array)]
例如:
var arr= [2,"12",2,12,1,2,1,6,12,13,6];
arr=[...new Set(arr)];
console.log(arr) //[2, "12", 12, 1, 6, 13]
//2. indexOf方法去重
var arrN=[];
for(var i=0;i<arr.length;i++){
if(arrN.indexOf(arr[i])<0){
arrN.push(arr[i])
}
}
console.log(arrN) //[2, "12", 12, 1, 6, 13]
// 3.相邻数比较法(原理,先排序,一样大的会排在一起,这样一比较,删除相同的,有个问题就是数组必须是用一类型
否则,这样一个数组[1, 1, 12, "12", 12, 13, 2, 2, 2, 6, 6],用以下方法 ==有7个值,===有5个值)
arr.sort();
for(var i=0;i<arr.length;i++){
if(arr[i]==arr[i+1]){
arr.splice(i,1);
i--;
}
}
console.log(arr) //[2, "12", 12, 1, 6, 13]
3.JavaScript replace() 方法:
定义和用法: replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
例如: $('input[name="tags"]').val()--->‘标签1’,‘标签2’,‘标签3’,‘标签4’
需要得到的结果是 ‘标签1’ ‘标签2’ ‘标签3’ ‘标签4’
即将字符串的逗号换成空格,这里就通过replace()方法
var x= $('input[name="tags"]').val().replace(/,/g,' ');
这里x得到的就是 ‘标签1’ ‘标签2’ ‘标签3’ ‘标签4’
4.计算数组中一个值连续出现的次数:
(注意:如果存在情况,需要比较的数组只有一个值的时候,下面的方法会出现无穷小的情况,所以需要先判断,数组长度是否是一个的逻辑)
var data = [3, 1, 2, 2, 2, 1, 1, 1, 1, 1,1, 2, 2, 2, 2,2,2,2,2]
function getTheMax(arr) {
var val = 1;
var newarr = [];
for (var i = 0; i < arr.length - 1; i++) {
if (arr[i] === arr[i + 1] ) {
val++
} else {
val = 1
}
newarr.push(val)
}
var maxs = Math.max.apply(null, newarr)
return maxs
}
console.log(getTheMax(data)) //得到的结果是8,2出现的最多,次数是8
以上情况,如果要计算一个数连续出现的次数最多的话,例如,1在这里连续出现次数最多的是,按照如下写法:
var data = [3, 1, 2, 2, 2, 1, 1, 1, 1, 1,1, 2, 2, 2, 2,2,2,2,2]
function getTheMax(arr) {
var val = 1;
var newarr = [];
for (var i = 0; i < arr.length - 1; i++) {
if (arr[i] === arr[i + 1] && arr[i]===1) {
val++
} else {
val = 1
}
newarr.push(val)
}
var maxs = Math.max.apply(null, newarr)
return maxs
}
console.log(getTheMax(data)) //结果是6,1连续出现次数最多的是6次
for循环里面 加一个定时器打印值只能打印最后值的问题:
下面的for循环,打印出来的是10个10,需求是打印0-9
for (var i = 0; i < 10; i++) {
setTimeout(function() {
console.log(i)
}, 0)
}
解决办法:
1.用let定义,不用var
2.如下编写
for (var i = 0; i < 10; i++) {
(function(j) {
setTimeout(function() {
console.log(j)
}, 0)
})(i)
}
5.在事件里面自动触发select的change事件
$('#sex').val(data.sex).trigger('change');//根据后台返回的字段,来触发性别选择。
6.textarea回车事件触发,调用搜索事件,但是文本框不让换行
//回车事件绑定
$('textarea').bind('keydown', function(event) {
if (event.keyCode == "13") {
//回车执行查询
search();
return false;
event.preventDefault();
}
});
7.给一个接口后面 加随机数,防止浏览器缓存JS文件
var goUrl = "doupan.js?tk=" + Math.random();
8.eval()--->将字符串转成函数
function test() {
console.log(9999)
}
eval('test()');
结果:页面打印 999
定义和用法:
eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。
语法
eval(string)
9. reload()
reload() 方法用于重新加载当前文档。
语法:
location.reload(force)
window.location.reload()
9.hasOwnProperty()方法:
hasOwnProperty()函数用于指示一个对象自身(不包括原型链)是否具有指定名称的属性。如果有,返回true,否则返回false。
遍历的时候,滤掉原型链上其它对象
10.一个对象是不是空对象
一、js判断一个对象是否为空对象
1)通过JSON自带的.stringify方法来判断
//JSON自带的stringify方法,将json转成json字符串
var c = {};
if(JSON.stringify(c) == "{}"){
console.log("是空对象");
}
2)for...in...遍历属性
//for in
var a = {};
var b = {foo:'bar'};
function aa(a){
for(var attr in a){
return true;
}
return false;
}
3)ES6新增的Object.keys() ,判断对象keys长度是否为0
if(Object.keys(obj).length==0){
console.log("es6 通过判断key的长度是否为0:是空对象");
}else{
console.log("es6 通过判断key的长度是否为0:不是空对象");
}
二、通过jquery提供的isEmptyObject(obj)
jQuery.isEmptyObject({});//true
jQuery.isEmptyObject({'foo':'bar'});//false