1.字符串反转
var string = 'abcd';
console.log(string.split('').reverse().join(''))
2.计时器
var countdown = 60;
var settime = function () {
if (countdown == 0) {
console.log("获取验证码");
countdown = null;
return;
} else {
console.log(countdown + "秒后重发");
countdown--;
}
setTimeout(function () {
settime()
}, 1000)
}
settime();
3.数组的reduce函数使用
- 数组求和
function sum(arr) {
return arr.reduce(function (x, y) {
return x + y;
});
}
sum([1, 2, 3, 4, 5]); // 15
- 统计数组中元素出现次数
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 is: // { 'Alice': 2, 'Bob': 1, 'Tiff': 1, 'Bruce': 1 }
- 数组去重
let arr = [1,2,1,2,3,5,4,5,3,4,4,4,4]; let result = arr.sort().reduce((init, current)=>{ if(init.length===0 || init[init.length-1]!==current){ init.push(current); } return init; }, []); console.log(result); //[1,2,3,4,5]
function noRe(arr) { var object = {}; return arr.reduce((init, current)=> { if (!object[current]) { init.push(current); object[current] = 1; } return init; }, []) }
-
var arr1 =[1,2,2,2,3,3,3,4,5,6], arr2 = []; for(var i = 0,len = arr1.length; i< len; i++){ if(arr2.indexOf(arr1[i]) < 0){ arr2.push(arr1[i]); } }
- 取数组最大的值
let result = arr.reduce((init, current)=> { if (init < current) { return current; } return init; }, 0)
4.object多字段排序
function compareString(a, b) {
var nameA = a.toUpperCase(); // ignore upper and lowercase
var nameB = b.toUpperCase(); // ignore upper and lowercase
if (nameA < nameB) {
return -1;
}
if (nameA > nameB) {
return 1;
}
// names must be equal
return 0;
}
var sources = [{age: 30, name: 'Cinter', JJ: 18},
{age: 25, name: 'an', JJ: 0},
{age: 34, name: 'An', JJ: 0},
{age: 5, name: 'biaoYu', JJ: 1}];
var compare = function (pro, pro2, pro3) {
return function sort(x, y) {
var value = x[pro] - y[pro];
if (value != 0) {
return value
}
value = compareString(x[pro2], y[pro2]);
if (value != 0) {
return value
}
return x[pro3] - y[pro3]
}
}
// return Date.parse(a.b) - Date.parse(b.b);
var sorted = sources.sort(compare('JJ', 'name', 'age'));
var mixedNumericArray = ["80", "9", "700", 40, 1, 5, 200];
function compareNumbers(a, b) {
return a - b;
}
//console.log('Sorted with compareNumbers:'+ mixedNumericArray.sort(compareNumbers));
//---------------数字字符串比较,会将其先转成数字再比较
5.取随机数
function getRandomInt(min, max) {
min = Math.ceil(min);//向上取整
max = Math.floor(max);//向下取整
return Math.floor(Math.random() * (max - min)) + min; //The maximum is exclusive and the minimum is inclusive
}
function getRandomIntInclusive(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min; //The maximum is inclusive and the minimum is inclusive
}
6.this的思考
-------------------闭包中的this,这个好好思考下
var myObject = {
foo: "bar",
func: function () {
var self = this;
this.i = 12;
console.log("outer func: this.foo = " + this.foo);
console.log("outer func: self.foo = " + self.foo);
console.log("outer func: this.i = " + this.i);
console.log("outer func: this = " + util.inspect(this));
(function () {
console.log("inner func: this.foo = " + this.foo);
console.log("inner func: self.foo = " + self.foo);
console.log("inner func: this.i = " + this.i);
console.log("inner func: this = " + this);//util.inspect(this)
}());
}
}
myObject.func();
console.log(myObject);
//严格模式下,立即执行函数的this 会报错,这里只是为了理解this
7.快速排序
function quickSort(arr) {
if (arr.length <= 1) {
return arr
}
var pivotIndex = Math.floor(arr.length / 2);
var pivot = arr.splice(pivotIndex, 1)[0];
var left = [];
var right = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i] < pivot) {
left.push(arr[i]);
} else {
right.push(arr[i]);
}
}
return quickSort(left).concat([pivot], quickSort(right));
}
8.深拷贝
//可以对javascript中5种主要的数据类型(包括number string object array boolean)进行深拷贝;
//第二种方法就是 var obj2=JSON.parse(JSON.stringify(a)),一句话顶的上下面整个函数...爽不爽.....
function clone(obj) {
var o;
switch (typeof obj) {
case "undefined":
break;
case "string":
o = obj + "";
break;
case "number":
o = obj - 0;
break;
case "boolean":
o = obj;
break;
case "object": // object 分为两种情况 对象(Object)或数组(Array)
if (obj === null) {
o = null;
} else {
//
//Object.prototype.toString.call(o) === '[object Array]';
if (Object.prototype.toString.call(obj).slice(8, -1) === "Array") {
o = [];
for (var i = 0; i < obj.length; i++) {
o.push(clone(obj[i]));
}
} else {
o = {};
for (var k in obj) {
o[k] = clone(obj[k]);
}
}
}
break;
default:
o = obj;
break;
}
return o;
}