前端JavaScript中array數(shù)組的基礎(chǔ)相關(guān)方法-數(shù)組排序與循環(huán)遍歷

數(shù)組排序

一再登、reverse

反轉(zhuǎn)數(shù)組順序

let arr = [1, 4, 2, 9];
console.log(arr.reverse()); //[9, 2, 4, 1]

二尔邓、sort

sort每次使用兩個值進(jìn)行比較 Array.sort((a,b)=>a-b

返回負(fù)數(shù) a 排在 b前面晾剖,從小到大
返回正數(shù) b 排在a 前面
返回 0 時不動
默認(rèn)從小于大排序數(shù)組元素

let arr = [1, 4, 2, 9];
console.log(arr.sort()); //[1, 2, 4, 9]

使用排序函數(shù)從大到小排序锉矢,參數(shù)一與參數(shù)二比較梯嗽,返回正數(shù)為降序負(fù)數(shù)為升序

let arr = [1, 4, 2, 9];

console.log(arr.sort(function (v1, v2) {
    return v2 - v1;
})); //[9, 4, 2, 1]

下面是按課程點擊數(shù)由高到低排序

let lessons = [
  { title: "媒體查詢響應(yīng)式布局", click: 78 },
  { title: "FLEX 彈性盒模型", click: 12 },
  { title: "MYSQL多表查詢隨意操作", click: 99 }
];

let sortLessons = lessons.sort((v1, v2) => v2.click - v1.click);
console.log(sortLessons);

三、排序原理

let arr = [1, 5, 3, 9, 7];
function sort(array, callback) {
  for (const n in array) {
    for (const m in array) {
      if (callback(array[n], array[m]) < 0) {
        let temp = array[n];
        array[n] = array[m];
        array[m] = temp;
      }
    }
  }
  return array;
}
arr = sort(arr, function(a, b) {
  return a - b;
});
console.table(arr);

循環(huán)遍歷

一沽损、for

根據(jù)數(shù)組長度結(jié)合for 循環(huán)來遍歷數(shù)組

let lessons = [
    {title: '媒體查詢響應(yīng)式布局',category: 'css'},
  {title: 'FLEX 彈性盒模型',category: 'css'},
    {title: 'MYSQL多表查詢隨意操作',category: 'mysql'}
];

for (let i = 0; i < lessons.length; i++) {
  lessons[i] = `后盾人: ${lessons[i].title}`;
}
console.log(lessons);

二灯节、forEach

forEach使函數(shù)作用在每個數(shù)組元素上,但是沒有返回值绵估。

下面例子是截取標(biāo)簽的五個字符炎疆。

let lessons = [
    {title: '媒體查詢響應(yīng)式布局',category: 'css'},
  {title: 'FLEX 彈性盒模型',category: 'css'},
    {title: 'MYSQL多表查詢隨意操作',category: 'mysql'}
];

lessons.forEach((item, index, array) => {
    item.title = item.title.substr(0, 5);
});
console.log(lessons);

三、for/in

遍歷時的 key 值為數(shù)組的索引

let lessons = [
    {title: '媒體查詢響應(yīng)式布局',category: 'css'},
  {title: 'FLEX 彈性盒模型',category: 'css'},
    {title: 'MYSQL多表查詢隨意操作',category: 'mysql'}
];

for (const key in lessons) {
    console.log(`標(biāo)題: ${lessons[key].title}`);
}

四国裳、for/of

for/in 不同的是 for/of 每次循環(huán)取其中的值而不是索引形入。

let lessons = [
    {title: '媒體查詢響應(yīng)式布局',category: 'css'},
  {title: 'FLEX 彈性盒模型',category: 'css'},
    {title: 'MYSQL多表查詢隨意操作',category: 'mysql'}
];

for (const item of lessons) {
  console.log(`
    標(biāo)題: ${item.title}
    欄目: ${item.category == "css" ? "前端" : "數(shù)據(jù)庫"}
  `);
}

使用數(shù)組的迭代對象遍歷獲取索引與值(有關(guān)迭代器知識后面章節(jié)會講到)

const hd = ['rose', 'jeck'];
const iterator = hd.entries();
console.log(iterator.next()); //value:{0:0,1:'rose'}
console.log(iterator.next()); //value:{0:1,1:'jeck'}

這樣就可以使用解構(gòu)特性與 for/of 遍歷并獲取索引與值了

const hd = ["rose", "jeck"];

for (const [key, value] of hd.entries()) {
  console.log(key, value); //這樣就可以遍歷了
}

取數(shù)組中的最大值

function arrayMax(array) {
  let max = array[0];
  for (const elem of array) {
    max = max > elem ? max : elem;
  }
  return max;
}

console.log(arrayMax([1, 3, 2, 9]));

迭代器方法

一、keys

通過迭代對象獲取索引

const hd = ["rose", "jeck"];
const keys = hd.keys();
console.log(keys.next());
console.log(keys.next());

獲取數(shù)組所有鍵

"use strict";
const arr = ["a", "b", "c", "rose"];

for (const key of arr.keys()) {
  console.log(key);
}

使用while遍歷

let arr = ["rose", "jeck"];
while (({ value, done } = values.keys()) && done === false) {
    console.log(value);
}

二缝左、values

通過迭代對象獲取值

const hd = ["rose", "jeck"];
const values = hd.values();
console.log(values.next());
console.log(values.next());
console.log(values.next());

獲取數(shù)組的所有值

"use strict";
const arr = ["a", "b", "c", "rose"];

for (const value of arr.values()) {
  console.log(value);
}

三亿遂、entries

返回數(shù)組所有鍵值對,下面使用解構(gòu)語法循環(huán)

const arr = ["a", "b", "c", "rose"];
for (const [key, value] of arr.entries()) {
  console.log(key, value);
}

解構(gòu)獲取內(nèi)容(對象章節(jié)會詳細(xì)講解)

const hd = ["jeck", "rose"];
const iterator = hd.entries();

let {done,value: [k, v]} = iterator.next();

console.log(v);

本文參考連接:
https://houdunren.gitee.io/note/js/4%20%E6%95%B0%E7%BB%84%E7%B1%BB%E5%9E%8B.html#%E6%95%B0%E7%BB%84%E6%8E%92%E5%BA%8F

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末渺杉,一起剝皮案震驚了整個濱河市蛇数,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌是越,老刑警劉巖耳舅,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異倚评,居然都是意外死亡浦徊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進(jìn)店門天梧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辑畦,“玉大人,你說我怎么就攤上這事腿倚〈砍觯” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵敷燎,是天一觀的道長暂筝。 經(jīng)常有香客問我,道長硬贯,這世上最難降的妖魔是什么焕襟? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮饭豹,結(jié)果婚禮上鸵赖,老公的妹妹穿的比我還像新娘务漩。我一直安慰自己,他們只是感情好它褪,可當(dāng)我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布饵骨。 她就那樣靜靜地躺著,像睡著了一般茫打。 火紅的嫁衣襯著肌膚如雪居触。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天老赤,我揣著相機與錄音轮洋,去河邊找鬼。 笑死抬旺,一個胖子當(dāng)著我的面吹牛弊予,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播开财,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼汉柒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了床未?” 一聲冷哼從身側(cè)響起竭翠,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎薇搁,沒想到半個月后斋扰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡啃洋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年传货,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宏娄。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡问裕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出孵坚,到底是詐尸還是另有隱情粮宛,我是刑警寧澤,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布卖宠,位于F島的核電站巍杈,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏扛伍。R本人自食惡果不足惜筷畦,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望刺洒。 院中可真熱鬧鳖宾,春花似錦吼砂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至漂问,卻和暖如春赖瞒,著一層夾襖步出監(jiān)牢的瞬間女揭,已是汗流浹背蚤假。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吧兔,地道東北人磷仰。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像境蔼,于是被迫代替她去往敵國和親灶平。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,494評論 2 348