一、自定义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++),继续进行下一次判断
*/