js经典小demo日常记录

本文介绍了JavaScript实现的冒泡排序、数组去重、查找字符串中第一个不重复的字符、延迟执行、数组对象操作、查找字符串中出现次数最多的字符、获取对称数以及函数柯里化的应用。通过这些实例,展示了JavaScript在处理数据和算法方面的灵活性。
摘要由CSDN通过智能技术生成
1、js手写冒泡排序

冒泡排序从第一个开始,依次与后一个比较大小,大于后一个则调换位置,最后一个则是最大的数,每轮循环确定的最大值不参与后面的循环比对。

dealArrSort(){
	var arr = [32,12,3,2,44,100];
	for(let i=0;i<arr.length;i++){
		for(let j=0;j<arr.length-i-1;j++){
			if(arr[j]>arr[j+1]){
				let temp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = temp;
			}
		}
	}
	console.log("result",arr);//[2, 3, 12, 32, 44, 100]
}
2、手写数组去重
dealUniqArr(){
	let oldArr = [1,1,'a','a',null,null,undefined,undefined];
	//First Blood
	let newArrSet = Array.from(new Set(oldArr));
	//Double Kill 
	let newArrlodash = _.union(oldArr);
	//Trible Kill
	let newArrFor = [];
	for(let i = 0;i<oldArr.length;i++){
		if(-1 === newArrFor.indexOf(oldArr[i])){
			newArrFor.push(oldArr[i]);
		}
	}
	//Quadra Kill
	//Penta Kill
	console.log("reslut",newArrSet,newArrlodash,newArrFor);//[1,'a',null,undefined]
}
3、查找字符串中第一个不重复的字符
getUniqCharacter(){
	let str = '12abzba21';
	for(let i=0;i<str.length;i++){
		if(str.indexOf(str[i]) === str.lastIndexOf(str[i])){
			console.log("result",str[i])// z
			return;
		}
	}
}
4、实现延迟执行后面逻辑

等待5秒返回Promise结果,结束同步方法,执行alert

/**
* @param {number} time 毫秒数
*/
async delayTest(time) {
  await this.delay(time);
  alert(`延迟了${time / 1000}秒弹出`);
},

delay(time) {
  return new Promise(resolve => {
    setTimeout(resolve(), time);
  })
},
}
5、数组对象-利用lodash取某一个属性值存在于另一个数组对象的数据
 /**
 *获取oldObjTwo中num存在于oldObjOne的数据
 */
  getArraySameData() {
    let oldObjOne = [
      { num: 'aa', age: '25' },
      { num: 'bb', age: '25' },
      { num: 'cc', age: '25' }
    ];
    let oldObjTwo = [
      { num: 'aa', sex: '男' },
      { num: 'ab', sex: '男' },
      { num: 'bb', sex: '女' }
    ];
    //将oldObjOne中数组转换成num为key值的对象
    let oldObjOneTransform = _.keyBy(oldObjOne, 'num');
    let newObj = _.filter(oldObjTwo, (item) => {
      return oldObjOneTransform[item.num]
    })
    console.log("reslut", newObj);// [ { num: 'aa', sex: '男' }, { num: 'bb', sex: '女' }]
  }
6、查找字符串中出现次数最多的字符和出现次数
 getMaxStr() {
      let str = 'sdfsds123';
      let obj = {};
      for (let i = 0; i < str.length; i++) {
        var chart = str.charAt(i);
        if (obj[chart]) {
          obj[chart]++;
        } else {
          obj[chart] = 1;
        }
      }
      console.log("obj", obj)

      let max = 0;
      let maxChar = null;
      for (let key in obj) {
        if (obj[key] > max) {
          max = obj[key];
          maxChar = key;
        }
      }
      console.log(`最多的字符为${maxChar},出现${max}`);
    }
7、获取对称数
/**
*	获取1-1000之间的对称数(如 1,2,121,676,999);
*/
getSymmetricNum(){
	for(let i = i;i<=1000;i++){//遍历1-1000
		 i= i.toString();//将数字转成字符串
		 let arr = Object.values(i);//将字符串转成数组
		 arr = arr.reverse();//反转数组
		 let str = arr.join('');//将返转后的数组转换成字符串
		 if(i == str){//比较原数字字符串是否相等
			console.log("对称数:"i);
		} 
	}
}
8、函数柯里化应用,封装一个满足以下预期的函数
//期望实现一个add方法,使计算结果能够满足如下预期:
add(1)(2)(3) = 6;
add(1, 2, 3)(4) = 10;
add(1)(2)(3)(4)(5) = 15;

function add() {
    // 第一次执行时,定义一个数组专门用来存储所有的参数
    var _args = Array.prototype.slice.call(arguments);

    // 在内部声明一个函数,利用闭包的特性保存_args并收集所有的参数值
    var _adder = function() {
        _args.push(...arguments);
        return _adder;
    };

    // 利用toString隐式转换的特性,当最后执行时隐式转换,并计算最终的值返回
    _adder.toString = function () {
        return _args.reduce(function (a, b) {
            return a + b;
        });
    }
    return _adder;
}

add(1)(2)(3)                // 6
add(1, 2, 3)(4)             // 10
add(1)(2)(3)(4)(5)          // 15
add(2, 6)(1)                // 9

仅记录所用~~~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值