溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

JS求Number類型數(shù)組中最大元素方法

發(fā)布時(shí)間:2020-10-06 19:22:03 來源:腳本之家 閱讀:115 作者:snowell 欄目:web開發(fā)

如何使用JS,在一個(gè)Number類型的數(shù)組里,查找最大(或最?。?shù)呢?

以下介紹四個(gè)方法。

1. 不使用任何庫函數(shù)

代碼如下:

function findMax1 (arr) {
  let result = 0;
  if (Array.isArray(arr)) {
    for (let i = 0; i < arr.length; i++) {
      result = arr[i] > result ? arr[i] : result;
    }
    
    return result;
  } else {
    console.error('The parameter arr is not an array');
    return;
  }
}

解釋:

利用一個(gè)變量result來存儲最大值。遍歷待查找的數(shù)組,如果當(dāng)前遍歷的元素大于result,就把這個(gè)元素賦值給result。

2. 利用Array.reduce()

代碼如下:

function findMax2 (arr) {
  let result = 0;
  if (Array.isArray(arr)) {
    result = arr.reduce((a, b) => {
      return a > b ? a : b;
    }, 0);
    
    return result;
  } else {
    console.error('The parameter arr is not an array');
    return;
  }
}

解釋:

reduce方法就是通過一個(gè)函數(shù),針對一個(gè)累加器(accumulator)和數(shù)組中的每一個(gè)元素,將一個(gè)數(shù)組最終減少到一個(gè)值。

reduce接受兩個(gè)參數(shù):

第一個(gè)是callback,就是那個(gè)前面提到的那個(gè)函數(shù)。它有四個(gè)參數(shù):

  1. accumulator:累加器,它是上次運(yùn)行callback的結(jié)果。如果提供了initialValue,那么第一次就是initialValue;
  2. currentValue:當(dāng)前遍歷的數(shù)組的元素;
  3. currentIndex:當(dāng)前遍歷的數(shù)組的元素的index,從0開始。如果提供了initialValue,那就從1開始;
  4. array:當(dāng)前應(yīng)用reduce的數(shù)組。

第二個(gè)是initialValue,是一個(gè)初值,作為第一次運(yùn)行callback函數(shù)的第一個(gè)實(shí)參。這個(gè)是可選的。這里要注意一下,如果這個(gè)參數(shù)不提供,并且應(yīng)用在一個(gè)空數(shù)組上,是會報(bào)錯(cuò)的。

那么上面代碼的意思就是,每次遍歷數(shù)組進(jìn)行比較,大的就留下來,即accumulator,并將其用作下一次和數(shù)組元素的比較。最后只留下這一個(gè)值,即最大值。

3. 利用Apply和Math.max()

代碼如下:

function findMax3 (arr) {
  let result = 0;
  if (Array.isArray(arr)) {
    result = Math.max.apply(null, arr);
    
    return result;
  } else {
    console.error('The parameter arr is not an array');
    return;
  }
}

解釋:

apply解釋稍顯復(fù)雜,不作進(jìn)一步的解釋。

它接受兩個(gè)參數(shù),第一個(gè)是thisArg,第二個(gè)是argsArray。兩個(gè)都是可選的。此處簡單來說,就是使用一個(gè)函數(shù)時(shí),參數(shù)以數(shù)組的方式傳遞進(jìn)去。

4. 只用Math.max()

代碼如下:

function findMax4 (arr) {
  let result = 0;
  if (Array.isArray(arr)) {
    result = Math.max(...arr);
    
    return result;
  } else {
    console.error('The parameter arr is not an array');
    return;
  }
}

解釋:

基于上一個(gè)解法的思路,在ES6中,有一個(gè)擴(kuò)展運(yùn)算符(...),可以將一個(gè)數(shù)組中的元素拆出來,組成一個(gè)用逗號分隔的序列。剛好滿足Math.max()函數(shù)的需求。

在給大家介紹一下JS之number、Math和數(shù)組的相關(guān)知識點(diǎn)

1、Number對象。

創(chuàng)建Number對象的方式:

方式1:

var 變量= new Number(數(shù)字)

方式2:

var 變量 = 數(shù)字;

常用的方法:

toString() 把數(shù)字轉(zhuǎn)換成指定進(jìn)制形式的字符串。(輸入數(shù)字幾,就轉(zhuǎn)換為幾, number.toString(2))

toFixed() 指定保留小數(shù)位,而且還帶四舍五入的功能。

2、Math  

Math對象常用的方法:

ceil 向上取整

floor() 向下取整

random() 隨機(jī)數(shù)方法 // 產(chǎn)生的偽隨機(jī)數(shù)介于 0 和 1 之間(含 0,不含 1),

round 四舍五入

3、Array數(shù)組對象:

創(chuàng)建數(shù)組的方式1:

var 變量名 = new Array(); 創(chuàng)建一個(gè)長度為0的數(shù)組。

方式2:

var 變量名= new Array(長度) 創(chuàng)建一個(gè)指定長度的數(shù)組對象。

方式3:

var 變量名 = new Array("元素1","元素2"...); 給數(shù)組指定元素創(chuàng)建數(shù)組 的對象。

方式4:

var 變量名 = ["元素1","元素2"...];

數(shù)組要注意的細(xì)節(jié):

1. 在javascript中數(shù)組的長度是可以發(fā)生變化的。

var arr = new Array(); //創(chuàng)建了一個(gè)長度為0的數(shù)組對象。
arr[100] = 10;
document.write("arr長度:"+arr.length+"<br/>");
var arr2 = new Array("狗娃","狗剩","鐵蛋");
arr2 = ["狗娃","狗剩","鐵蛋","張三"];
document.write("arr2長度:"+arr2.length+"<br/>");

3.1數(shù)字的方法

a、concat把a(bǔ)rr1與arr2的數(shù)組元素組成一個(gè)新的數(shù)組返回?! ?arr1 = arr1.concat(arr2); 

b、join使用指定的分隔符把數(shù)組中的元素拼裝成一個(gè)字符串返回。

var elements = arr1.join(",");

c、pop :移除數(shù)組中的最后一個(gè)元素并返回該元素。

d、push:將新元素添加到一個(gè)數(shù)組中,并返回?cái)?shù)組的新長度值。

arr1.push("你好");

e、reverse(); 翻轉(zhuǎn)數(shù)組的元素

f、slice指定數(shù)組 的開始索引值與結(jié)束索引值截取數(shù)組的元素,并且返回子數(shù)組。(包頭不包尾)

var subArr = arr1.slice(1,2); 

g、sort排序,排序的時(shí)候一定要傳入排序的方法。(不傳時(shí)默認(rèn)是按照ASCII表排列)

arr1 = [19,1,20,5];
arr1.sort(sortNumber); //排序,排序的時(shí)候一定要傳入排序的方法。
function sortNumber(num1,num2){ 
return num1-num2;
}

h、splice第一個(gè)參數(shù)是開始刪除元素的 索引值, 第二參數(shù)是刪除元素的個(gè)數(shù),往后的數(shù)據(jù)就是插入的元素(也可以不寫)。

arr1.splice(1,1,"張三","李四","王五");

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI