js练习题 (4)

一、自定义max或者min方法来遍历数组,用找到的最值和每个值进行比较

//方法1:
var arr = [5, -10,,100,1255,99999, 22, 60, 0, 2, 3];
var max=0, min=0;
function lookupMax(num1, num2) {
    if (num1 > num2) {
        return num1;
    } else if (num2 > num1) {
        return num2;
    } else {
        return num1;
    }
}
function lookupMin(num1, num2) {
    if (num1 < num2) {
        return num1;
    } else if (num2 < num1) {
        return num2;
    } else {
        return num1;
    }
}
for (let i = 0; i < arr.length - 1; i++) {           
    max = lookupMax(arr[i], max)
}
for (let j = 0; j < arr.length-1; j++) {
    min = lookupMin(min,arr[j])
}
console.log("数组为:" + arr);
console.log("最大的数:" + max);
console.log("最小的数:" + min);
/*
遍历2.0:————forin
for (const key in arr) {
   min= lookupMin(min,arr[key])
}
for (const key in arr) {
   max= lookupMax(max,arr[key])
}
遍历3.0:————forEach
arr.forEach(function (val1, index1) {
    max = lookupMax(max, arr[index1])
})
arr.forEach(function (val1, index1) {
    min = lookupMin(min, val1)
})
遍历4.0:————forof
for (const val of arr) {
    max = lookupMax(val, max)
}
for (const val of arr) {
    min = lookupMin(min, val)
}
*/

        
//方法2:
var arr = [5, -10, , 100, 1255, 99999, 22, 60, 0, 2, 3];
console.log("数组为:" + arr);
arr.sort()
var max = arr[len-2], min = arr[0];//倒数第1位为",",故取-2
console.log("最大的数:" + max);
console.log("最小的数:" + min);
//方法3:
var arr = [5, -10, , 100, 1255, 99999, 22, 60, 0, 2, 3];
var max = 0, min = 0;
for (let i = 0; i < arr.length; i++) {
    if (arr[i] > max) {
        max = arr[i];
    }
    if (arr[i] < min) {
        min = arr[i];
    }
}
console.log("数组为:" + arr);
console.log("最大的数:" + max);
console.log("最小的数:" + min);

二、尽可能多的方法实现数组去重

//方法1:原数组不改变,返回新数组——.indexOf(+).push 
  
var Arr = ["999", "2", "e", "r", "1qwe", "1qwe", "1qweqwe", "r", "e", "q", "w"]
function removeVal(arr) {
    if (!Array.isArray(arr)) {
        console.log('type error!')
        return;
    }
    var newarr = []
    for (let j = 0; j < arr.length; j++) {
        if (newarr.indexOf(arr[j]) == -1) {
            newarr.push(arr[j])                    
        }
    }
    return newarr;
}
console.log(removeVal(Arr));

//方法2:在原数组上操作——双重循环+splice(j, 1)
var Arr1 = ["999", "2", "e", "r", "1qwe", "1qwe", "1qweqwe", "r", "e", "q", "w"]
function removal(arr) {
    for (let i = 0; i < arr.length; i++) {
        for (let j = i + 1; j < arr.length; j++) {
            if (arr[i] == arr[j]) {
                arr.splice(j, 1)//删除元素,长度自动--
            }
        }
    }
    return arr;
}
console.log(removal(Arr1));
//方法3:——
var Arr2 = ["999", "2", "w",  "1qwe", "console.error()", "console.error()",  "w"]
console.log(Arr2);
function removal(arr) {
    for (var i = 0; i < arr.length; i++) {
        if (arr.indexOf(arr[i]) != i) {
            arr.splice(i, 1)            
        }
    }
    return arr;
}
console.log(removal(Arr2));
/* 
    console.log(arr.indexOf(arr[i]) + ":" + arr[i] + ":" + i);
    因为indexOf返回的是第一个出现的索引值
    所以当前值得索引不等于当前循环的标志值i,那么说明当前值是重复的
*/
//方法4:——
var arr = ["999", "2", "w",  "1qwe", "console.error()", "console.error()",  "w"]
function removeVal(arr) {
    arr.sort()
    var newArr = [arr[0]]
    for (var i = 1; i < arr.length; i++) {
        if (arr[i] !== newArr[newArr.length - 1]) {
            newArr.push(arr[i])
        }
    }
    return newArr;
}
console.log(removeVal(arr))
/*
    新数组初始值为原数组:第一位元素
    (从左往右)依次将原数组的元素push到新数组中,
    因为是经过排序后的数组,所以相邻的元素都挨在一起,
    当即将push到新数组的元素与新数组中的最后一位元素相同时,说明不能再push进去了,原数组索引加1,(i++),继续进行下一次判断
        */ 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值