算法篇(日积月累)


第一题:


let arr = [
            { "name": "www", "time": 110 },
            { "name": "aaa", "time": 180 },
            { "name": "aaa", "time": 220 },
            { "name": "ddd", "time": 30 },
            { "name": "aaa", "time": 190 },
            { "name": "www", "time": 80 },
            { "name": "www", "time": 90 },
            { "name": "aaa", "time": 220 },
            { "name": "bbb", "time": 60 },
        ];
        //去重数组的name并且计算相同name的次数,过滤相同name时time的最大值,输出实例:
        // [
        //     { "name": "www", "time": 110, "count": 3 },
        //     { "name": "aaa", "time": 220, "count": 3 },
        //     { "name": "ddd", "time": 30, "count": 1 },
        //     { "name": "bbb", "time": 60, "count": 1 }
        // ]

        // start是初始值,数组
        // item是arr遍历的每一个对象
        function filterArr(arr) {
            // 声明一个hash对象,用于检测是否遍历到重复的name值:
            // 没有重复name : 设为true并向初始值数组start内插入遍历到的item且添加count为1;

            // 有重复name : 则对初始值数组进行find遍历,返回符合条件的第一个对象,即过滤掉不符合条件的item;
            // 重复数据的count++
            // 取obj和item中time大的值为obj中time的值
            let hash = {};

            // reduce方法接收两个参数:function()、传递给第一个参数function的初始值;
            // 上述的function 又有四个参数:start(函数的初始值。必须参数)、currentValue(当前元素或者说是遍历数组的item。必需参数)、currentIndex(当前元素的索引。不必需参数)、arr(当前元素所属的数组对象。不必需参数)
            return arr.reduce((start, item) => {
                if (hash[item.name]) {
                    // find方法,返回符合条件的第一个对象
                    let obj = start.find(e => e.name === item.name)
                    console.log(start, 'start')
                    obj.count++;
                    obj.time = Math.max(obj.time, item.time)
                } else {
                    hash[item.name] = true;
                    start.push({ ...item, count: 1 })
                }
                return start
            }, [])
        }

        const result = filterArr(arr)
        console.log(result, '输出结果')

第二题:判断字符串是否是回文


const str = "1thht1"
function isHuiwen(str){
	//将字符串反转,判断前后是否相同
	let string = str.split("").reverse().join("");
	return str === string
}

//或者
function isHuiwen(str){
	var len = str.length;
	//循环判断前后对应数字是否相同,不相同则返回false;
	for(var i = 0; i < len/2; i++){
		if(str[i] != str[len-i-1]){
			return false
		}
	}
	//否则返回true
	return true
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值