js基础算法

求1-100之间的和?

var num = 0;

方法1:

for(var i = 0;i<=100;i++){num += i;}

方法2:

var i = 0;

while(i<=100){num +=i; i++}

方法3:

var i = 0;

do{num += i;i++}

while(i<=100);

console.log(num)   ==>5050;

求var arr = [2,4,6]的和?
方法1:
var num = 0;
for(var i = 0;i<arr.length;i++){
    num += arr[i];
}
方法2:
var fn1 = (a,b)=>a+b;
var newArr = arr.reduce(fn1,0);
优化方法2:
arr.reduce((a,b)=>{return a + b})

方法3:同方法2
var fn1 = function(a,b){
    return a+b;
}
var newArr = arr.reduce(fn1,0);

console.log(arr);

实现9*9乘法表?

var p = "";

for(var i = 1;i<=9;i++){

 for(var j = 1;j<=i;j++){

      p += "<p>" +i+ "*" +j+ "=" +i*j+"</p>"

   }

}

document.write(p);

利用事件冒泡实现数组排序?

var arr = [1,3,4,6,11,14,10,5,45,23,67];
方法1:
var newArr = 0;

for(var i = 0;i<arr.length;i++){

  for(var j = i+1;j<arr.length;j++){

      if(arr[i] > arr[j]){       //从小到大

         newArr = arr[i];

        arr[i] = arr[j];

        arr[j] = newArr;

      }

   }

}

console.log(arr);
方法2:
arr.sort((a,b)=>a-b);  //从小到大
arr.sort((a,b)=>b-a);   //从大到小

数组去重?
var arr = [1,2,1,4,2,2,5,6,3];
方法1:
var num = [];
for(var i = 0;i<arr.length;i++){
    if(num.indexOf(arr[i]) == -1){
        num.push(arr[i]);
  }
}
console.log(arr);

方法2:
var newArr = new Set(arr);
var num2 = Array.from(newArr);
console.log(num2);

方法3:
[...new Set(arr)]

遍历对象:

删除对象的value值为空或者为undefined;
var ss;
var result = {
	'a':'as',
	'b':'',
    'r':ss,
}

for(let i in result){
   if(result[i] === undefined || result[i] === ""){
        delete result[i]
 }
}
conssole.log(result[i])   //{'a':'as'}
  
//动态取对象键;
1、obj[Object.keys(obj)[0]]
2、for in




//判断数组里面的值都是一个确定的数
var arr = [1,1,1,2,3,4,5,0,0,0];
!arr.some(item => item !=='那个确定的数')  //返回布尔值
方法2:
const arr = [0, 0, 0, 0]
const temp = [...new Set(arr)]
const res = temp.length === 1 && temp[0] === 0
console.log(res)  
方法3:
var status=false
var arr=[0,0,0,0,0,0,0] //如果空数组不能算输出正确 下一行代码换成 arr.join('') || 1
var str=arr.join('')
var val=Number(str)
val===0 && status=true
console.log(status)
方法4:
let arr = [0, 0, 0, 0];
eval(arr.join('+')) == 0;
方法5:
let reg = /^0+$/g;
let arr = [0, 0, 0, 0];
reg.test(arr.join(''));
方法6:
let arr=[0,0,0,0,0,0,0];
console.log(arr.every(item=>item===0))
方法7:
var a = [0, '0', 0, 0, '0', 0, 0, 0]
console.log(!a.find(i => i!= 0))  // true

判断数组元素有两个或者两个以上的元素
for(var i = 0;i<lisRight.length;i++){
                for(var j = i+1;j<lisRight.length; j++){
                    if($(lisRight[i]).attr('id') == $(lisRight[j]).attr('id')){
                        alert('有相同的元素!!!')
                        
                    }
                }
            }


对象中的value值为空,删该项

function objNull(obj){
  for(let i in obj){
    obj[i]==""?delete obj[i]:obj[i]
  }
  return obj;
}
测试:========》
var ss = 12,dd = '';
var result = {
  'a':ss,
  'b':dd,
  'ff':15,
  'gg':""
}

var test = objNull(result);

//在原有数组基础上加1;
//Array.from()参数1,数组,参数2,函数(不能使用箭头函数,没搞明白),参数3,调用函数的this指向
   
var arrs = [1,2,3,4,5]; 
let obj = {mapFun:e=>{return e + 1}};
var newArr = Array.from(arrs,function(x){return this.mapFun(x)},obj);

:字符排序:
function pinyin(str){
	//Error type verification
	if(Array.isArray(str) == false || str === null || str.length < 0)throw new Error('Parameter type error');
	var newArr = [];
	//String ASCII transformation  
	for(var i = 0;i<str.length;i++){
		newArr.push(arr[i].charCodeAt());
	};
	//ASCII Sort
	let sortStr = newArr.sort((a,b)=>{return a-b});
	newArr = [];
	//The sorted ASCII code is converted into the corresponding string
	for(var j = 0;j<sortStr.length;j++){
		newArr.push(String.fromCharCode(sortStr[j]))
	};
	return newArr;
}

//不改变原始数组
arr.sort(function(a,b){return a.localeCompare(b)})
arr.sort(function(a,b){return  a.localeCompare(b,'zh-CN')})



//不借助第三方变量,变量值进行交换
// 	function swap(a,b){
// 		b = b-a;
// 		a = a+b;
// 		b = a-b;
// 		return [a,b]
// 	}

// var aa = 4,bb = 2;
// 		console.log(swap(aa,bb))


//二分法查找
function binarySearch(A, x) {
    var low = 0,high = A.length -1
    while (low <= high) {
        var mid = Math.floor((low + high) / 2)
        
        if (x == A[mid]) {
            return mid
        }
        
        if (x < A[mid]) {
            high = mid -1
        } else {
            low = mid + 1
        }
    }
    return -1
}
console.log(binarySearch([1,2,3,42,5,6,3,7,6,78,0,12],1))  //0


//快排
function quickSort(arr) {
    if (arr.length <= 1) {
        return arr
    }
    var index = Math.floor(arr.length / 2)
    var key = arr.splice(index,1)[0]
    var left = [],right = []
    arr.forEach(function(v){
      v <= key ? left.push(v) : right.push(v)
    })
    return quickSort(left).concat([key],quickSort(right))
}

var arr = [4,3,5,6,2,67,12,0,67,55];
console.log(quickSort(arr));

//找出数组差值
function sorts(arr1,arr2){
	return Math.max.apply(null,arr1) - Math.min.apply(null,arr2);
}
console.log(sorts([12,3,42,30],[12,3,4,56,34]))  //39;


//数组原型去重
Array.prototype.unique = function() {
    var result = []
    this.forEach(function(v){
        if(result.indexOf(v) < 0) {
            result.push(v)
        }
    })
    return result
}

var arr = [1,2,3,4,5,32,4,65,2,1,67,2,2,2,2];
console.log(arr.unique())

//查询字符串中出现最多的字符
function findMaxDuplicateChar(str) {
    if (str.length == 1) {
        return str
    }
    let charObj = {}
    for(let i = 0; i< str.length; i++) {
        if (!charObj[str.charAt(i)]) {
            charObj[str.charAt(i)] = 1
        } else {
            charObj[str.charAt(i)] += 1
        }
    }
    let maxChar = ''
    maxValue = 1
    for(var k in charObj) {
        if (charObj[k] >= maxValue) {
            maxChar = k
            maxValue = charObj[k]
        }
    }
    return maxChar
}

console.log(findMaxDuplicateChar('aaaaasdsa啊啊啊啊啊dsddhhhh'))

------------
//数组扁平化处理
let arr =[1,2,[4,2,3]]
1、arr.flat(Infinity)
2、arr.toString.split(',')
3、arr.join(',').split(',')
4、function ar(_arr){
    let result = [];
    _arr.forEach(item=>{
        if(Array.isArray){
               result = result.concat(ar(item))
        }else{
            result.push(item)
        }
    })
}

function fn(arr){
    return arr.reduce((result,item)=>{
        return result.concat(Array.isArray(item)?fn(item):item)
    },[])
}

...

//对象value添加引号
let obj = '{as s:12,gfg k:44}';
let newObj={};
let aaa = obj.replacr(/{|}|\s*/g,'').split(',');
aaa.foreach(el=>{
    let i = el.indexOf(':');
    newObj[el.substr(-,i)] = el.substr(i+1)
})



//求n个字符串
String.prototype.times = function(n){
return Array.prototype.join.call({length:n+1},this)
}
//打印100个hello
var ss = 'hello';
ss.times(100)//...

// 将对象转数组//[{},{}]
第一种:var obj = {'a':1,'b':2,'test':112},
 	arr = Object.entries(obj),
	newArr = [];
 arr.forEach(el=>{
	newArr.push({[el[0]]:el[1]});
 })

第二种:Object.keys(obj).forEach(v=>{
	console.log(obj[v])
	let o = {};
	o[v] = obj[v];
	newArr.push(o);
})




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值