算法相关的复习记录-持续更新
一: 数组去重
var arr=['12','32','89','12','12','78','12','32'];
// 最简单数组去重法,使用indexof()
function unique1(array){
var n = []; //一个新的临时数组
for(var i = 0; i < array.length; i++){ //遍历当前数组
if (n.indexOf(array[i]) == -1)
n.push(array[i]);
}
return n;
}
arr=unique1(arr);
二:冒泡排序
var arr = [29,45,51,68,72,97];
//外层循环,控制趟数,每一次找到一个最大值
for (var i = 0; i < arr.length - 1; i++) {
// 内层循环,控制比较的次数,并且判断两个数的大小
for (var j = 0; j < arr.length - 1 - i; j++) {
// 白话解释:如果前面的数大,放到后面(当然是从小到大的冒泡排序)
if (arr[j] > arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
三:计算数组各项重复的次数
var arr=['胡将','胡将','hujiang','胡将','胡江','hujiang'];
var obj={};
arr.sort(); //先排序
for(var i=0;i<arr.length;){
var con=0;
for(var j=i;j<arr.length;j++){
if(arr[i]===arr[j]){
con++
}
}
obj[arr[i]]=con;
i=i+con; //跳过重复的值
}
console.log(obj); //{ hujiang: 2, '胡将': 3, '胡江': 1 }
四:ES6的SET使用
add: 添加某个值。 ckear 清空 。delete。 foreach 遍历。 has ,返回布尔,是否存在
数组去重 var arr = [1,2,3,3,1,4]; [...new Set(arr)]; // [1, 2, 3, 4]
并集var a = new Set([1, 2, 3]); var b = new Set([4, 3, 2]); var union = new Set([...a, ...b]); // {1, 2, 3, 4}
交集var a = new Set([1, 2, 3]); var b = new Set([4, 3, 2]); var intersect = new Set([...a].filter(x => b.has(x))); // {2, 3}
差集 var a = new Set([1, 2, 3]); var b = new Set([4, 3, 2]);
var diffA = new Set([...a].filter(x => !b.has(x))); // {1}
var diffB = new Set([...b].filter(x => !a.has(x)));
var diffAll = new Set(...diffA,...diffB)
五:纯js实现点击一个圆
|AB|=Math.abs(Math.sqrt(Math.pow(X2-X1),2)+Math.pow(Y2-Y1,2)))
Math.abs()求绝对值
Math.pow(底数,指数)
Math.sqrt()求平方根
document.οnclick=function(e){
var r=50;//圆的半径
var x1=100,y1=100,x2= e.clientX;y2= e.clientY;
//计算鼠标点的位置与圆心的距离
//直角三角形a² * b² = c²
var len=Math.abs(Math.sqrt(Math.pow(x2-x1,2)+Math.pow(y2-y1,2)));
if(len<=50){console.log("内")}else{console.log("外")}