亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

javascript中數組的常用算法深入分析

2024-05-06 16:48:57
字體:
來源:轉載
供稿:網友

前言

Array是Javascript構成的一個重要的部分,它可以用來存儲字符串、對象、函數、Number,它是非常強大的。因此深入了解Array是前端必修的功課。本文將給大家詳細介紹了javascript中數組的常用算法,下面話不多說了,來一起看看詳細的介紹吧

一、不改變原數組,返回新數組(字符串)

1、concat()   連接兩個或者多個數組,兩邊的原始數組都不會變化,返回的是被連接數組的一個副本。

2、join()  把數組中所有的元素放入到一個字符串中,返回字符串

var a = [1,2,3];a.join([4,5,6]); // "14,5,624,5,63"a.join('sau');  // "1sau2sau3"

3、slice()    從開始到結束(不包括結束)選擇數組的一部分淺拷貝到一個新數組

var a = [1,2,3,4,5];a.slice(0,0);  //[]a.slice(0,1);  //[1]a.slice(2,4); //[3,4]a.slice(0,5); //[1,2,3,4,5]a.slice(10,1); //[]a.slice(4); //[5]

4、map()   創建一個新的數組并返回,其中新數組的每一個元素由調用原始數組中的每一個元素執行提供的函數得來,原數組不變

5、every()  對數組中的每一個元素都執行一次指定的回調函數,直到回調函數返回false,此時every()返回false并不再繼續執行,如果回調函數都對每一個元素都返回true,那么every()返回true。

6、some()  對數組中的每一個元素都執行一次指定的回調函數,直到回調函數返回true,此時some()返回true并不再執行。如果回調函數對每一個元素都返回false,那么some()將返回false。

7、filter()   創建一個新數組,其中包含通過所提供函數實現的測試的所有元素。

二、改變原數組

1、forEach()   針對每一個元素執行提供的函數。會修改原來的數組,不會返回執行結果,返回undefined。

2、pop()   刪除數組最后一個元素,返回被刪除的元素的值,如果數組為空,則不改變數組,返回undefined。

3、push()   向數組末尾添加一個或多個元素,返回改變后數組的長度。

4、reverse()   顛倒數組中元素的位置,返回該數組的引用。

5、shift()   從數組中刪除第一個元素,改變原數組,并返回該元素的值。

6、unshift()   將一個或者多個元素添加到數組的開頭,并返回新數組的長度。

7、sort()   對數組的元素進行排序,返回數組。排序不一定是穩定的。默認排序順序是根據字符串unicode碼點。

8、splice()   向數組中添加/刪除元素,然后返回被刪除的新數組()。

var a = [1,2,3,4,5];a.splice(0,1);  //刪除從0位置開始的1個 返回[1] a為[2,3,4,5] a.splice(1,0,99) //在1的位置插入99 [2,99,3,4,5]a.splice(1,1,88) //99替換為88 [2,88,3,4,5]

三、遍歷方法

1、獲取屬性名:for...in  和object.key()的區別

答:1、for in 遍歷對象可以枚舉的屬性名列表,包括[[prototype]]原型鏈;

2、Object.keys() 只查找屬性名是否在對象中,返回一個數組,包含所有可以枚舉的屬性名;

3、Object.getOwnPropertyNames()只查找屬性名是否在對象中,返回一個數組,包含所有的屬性名,不論是否可枚舉。

2、獲取屬性值: for... of 和object.values()

for of 語句:遍歷可迭代對象的可枚舉屬性值列表,包括[[propertype]]原型鏈;

object.values() :返回一個給定對象自身的所有可枚舉屬性的值,不包括原型鏈。

四、ES6語法Map鍵值對轉化為數組

new Map創建一個map

// new Map創建一個maplet map = new Map([[1,"one"], [2,"two"], [3,"three"]]);map.set(4, "four");// 獲取所有鍵值對console.log("獲取key")console.log([...map.keys()]) // 輸出[1, 2, 3, 4]console.log("獲取value")console.log([...map.values()]) // 輸出[one, two, three, four]console.log("獲取map數組")console.log([...map]) // 輸出[[1, "one"], [2, "two"], [3, "three"], [4, "four"]]

五、兩個升序的數組合并成一個升序數組

1、時間復雜度O(M+N),空間復雜度O(M+N)

function merge(left, right){ let result = [],  il  = 0,  ir  = 0; while (il < left.length && ir < right.length) {  result.push(left[il] < right[ir] ? left[il++] : right[ir++]);console.log(result); } return result.concat(left.slice(il)).concat(right.slice(ir));}

2、時間復雜度O(M+N),空間復雜度O(1)

 // m, n 是數組長度function merge(left, m, right, n) { var i = m - 1, j = n - 1, writeIdx = m + n - 1; while (i >= 0 && j >= 0) left[writeIdx--] = left[i] > right[j]? left[i--] : right[j--]; while (j >= 0) left[writeIdx--] = right[j--]; return left;}

六、數組重復問題

(一)數組去重

1、reduce方法

const distinct = arr => arr.sort().reduce( (init, current) => {  if (init.length === 0 || init[init.length - 1] !== current) {  init.push( current ); } return init;}, []);let arr = [1,2,1,2,3,5,4,5,3,4,4,4,4];distinct(arr); // [1, 2, 3, 4, 5]

2、filter方法

const distinct = arr => arr.filter( (element, index, self) => { return self.indexOf( element ) === index;});let arr = [1,2,1,2,3,5,4,5,3,4,4,4,4];distinct(arr); // [1, 2, 3, 5, 4]

(二)排序數組去重

/** * @param {number[]} nums * @return {number} */var removeDuplicates = function(nums) {  if(!nums || nums.length == 0) return 0;  let len = 0; for(let i = 1; i < nums.length; i++) {  if (nums[len] != nums[i]) {   nums[++ len] = nums[i];  } } return len + 1;};

(三)判斷數組是否存在重復

/** * @param {number[]} nums * @return {boolean} */var containsDuplicate = function(nums) {  let hashMap = new Map(); for(let i = 0; i < nums.length; i++) {    if( hashMap.has(nums[i]) ) {   return true;  }    hashMap.set(nums[i], 1); }  return false;};

七、兩個數組的交集

給定兩個數組,寫一個方法來計算它們的交集。

例如:

給定 nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].

注意:1、出結果中每個元素出現的次數,應與元素在兩個數組中出現的次數一致。2、

我們可以不考慮輸出結果的順序。

跟進:1、如果給定的數組已經排好序呢?你將如何優化你的算法?2、如果 nums1 的大小比 nums2 小很多,哪種方法更優?3、如果nums2的元素存儲在磁盤上,內存是有限的,你不能一次加載所有的元素到內存中,你該怎么辦?

解法:

/** * @param {number[]} nums1 * @param {number[]} nums2 * @return {number[]} */var intersect = function(nums1, nums2) {  var map1 = new Map(); var number = [];  for(var i = 0; i < nums1.length; i++) {  var map1Value = map1.get(nums1[i]);  map1.set( nums1[i], ( map1Value ? map1Value : 0 ) + 1 ); }  for(var i = 0; i < nums2.length; i++) {  if( map1.has(nums2[i]) && map1.get(nums2[i]) != 0 ) {   number.push(nums2[i]);   map1.set( nums2[i], map1.get(nums2[i]) - 1 );  } }  return number;};

八、找出一個數組中只出現一次的數字

給定一個非空整數數組,除了某個元素只出現一次以外,其余每個元素均出現兩次。找出那個只出現了一次的元素。

/** * @param {number[]} nums * @return {number} */var singleNumber = function(nums) {  let number = 0; for(let i = 0; i < nums.length; i++) {  number ^= nums[i]; } return number;};

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品国产高清| 久久精品视频中文字幕| 亚洲精品一区在线观看香蕉| www欧美xxxx| 久久九九热免费视频| 国产成人鲁鲁免费视频a| 日韩精品久久久久久福利| 亚洲欧美日韩直播| 亚洲日韩第一页| 日韩中文字幕视频在线| 青草青草久热精品视频在线观看| 97香蕉久久超级碰碰高清版| 国产精品一区电影| 91精品啪在线观看麻豆免费| 国产a级全部精品| 91精品久久久久久久久青青| 国产亚洲成av人片在线观看桃| 国产福利视频一区| 日韩成人激情在线| 91精品国产亚洲| 亚洲免费人成在线视频观看| 国产成人avxxxxx在线看| 国产精品久久91| 久久视频免费在线播放| 国产综合在线视频| 4444欧美成人kkkk| 亚洲精品成人久久久| 日韩电影大全免费观看2023年上| 国产91精品黑色丝袜高跟鞋| 成人免费网站在线观看| 国产精品黄色影片导航在线观看| 国产精品激情av电影在线观看| 精品国产一区二区三区久久久狼| 欧美精品电影免费在线观看| 911国产网站尤物在线观看| 日本人成精品视频在线| 成人av电影天堂| 日韩av在线网| 国内精品中文字幕| 性欧美在线看片a免费观看| 成人精品网站在线观看| 欧美日韩福利电影| 日韩亚洲在线观看| 亚洲精品成人av| 8x拔播拔播x8国产精品| 91精品在线观| 2021久久精品国产99国产精品| 国外成人在线视频| 91国产在线精品| 日韩一区二区三区在线播放| 国产精品久久久久久久一区探花| 久久久久久久一区二区三区| 欧美在线亚洲一区| 欧美激情视频网站| 日韩中文理论片| 亚洲综合在线做性| 欧美日本高清视频| 国产偷亚洲偷欧美偷精品| 国产精品久在线观看| 久久久久久久久爱| 国产精品福利在线观看| 欧美激情二区三区| 国产999在线观看| 精品久久久久久久久久久久| 国产精品久久久久久久久久99| 欧美性猛交xxxx富婆| 热久久美女精品天天吊色| 免费成人高清视频| 成人免费在线视频网站| 91成人在线播放| 97国产真实伦对白精彩视频8| 国产亚洲精品成人av久久ww| 国产日韩av在线| 国产精品香蕉在线观看| 亚洲美女视频网| 欧美夜福利tv在线| 日韩av日韩在线观看| 欧美性在线视频| 成人黄在线观看| 好吊成人免视频| 欧美激情亚洲一区| 亚洲国产精品悠悠久久琪琪| 日韩精品极品毛片系列视频| 国产精品中文字幕在线| 久久久久久久亚洲精品| …久久精品99久久香蕉国产| 自拍偷拍亚洲精品| 欧美午夜女人视频在线| 欧美日韩国产精品专区| 91国内产香蕉| 欧美极品美女电影一区| 成人午夜高潮视频| 国产美女精品视频免费观看| 91高潮在线观看| 91精品国产高清久久久久久91| 91久久精品在线| 欧美激情精品久久久久久黑人| 欧美激情视频网站| 国产一区二区在线免费| 欧美激情三级免费| 日本最新高清不卡中文字幕| 欲色天天网综合久久| 4438全国成人免费| 最近2019免费中文字幕视频三| 92看片淫黄大片看国产片| 91视频国产高清| 久久这里有精品| 国产一区二区三区视频| 亚洲а∨天堂久久精品喷水| 亚洲欧美日韩国产精品| 欧美日韩亚洲一区二区| 日韩国产高清视频在线| 国产日本欧美在线观看| 欧美视频在线观看 亚洲欧| 国产精品999999| 超在线视频97| 国产成人+综合亚洲+天堂| 亚洲日韩欧美视频一区| 亚洲精品成人免费| 国产婷婷成人久久av免费高清| 亚洲国产精品嫩草影院久久| 亚洲欧美在线免费观看| 亚洲精品国产福利| 97精品视频在线| 亚洲另类激情图| 日韩在线精品一区| 欧美激情一区二区三区成人| 色噜噜狠狠狠综合曰曰曰| 欧美日韩在线观看视频| 国产精品亚洲美女av网站| 欧美限制级电影在线观看| 欧美贵妇videos办公室| 97视频人免费观看| 成人免费观看49www在线观看| 国产专区精品视频| 国产亚洲精品久久久优势| 91精品国产乱码久久久久久久久| 日韩人体视频一二区| 91在线观看免费高清| 成人a在线视频| 日本精品视频在线播放| 欧美风情在线观看| 欧美在线一区二区视频| 欧美性xxxx18| 欧美激情免费观看| 国产精品国产福利国产秒拍| 在线一区二区日韩| 亚洲欧洲黄色网| 欧美国产中文字幕| xxxxxxxxx欧美| 国产精品视频网| 成年无码av片在线| 欧美高清视频在线播放| 国产精品日韩专区| 国产福利视频一区| 伊人久久精品视频| 日日噜噜噜夜夜爽亚洲精品| 热re99久久精品国产66热| 精品无人国产偷自产在线| 亚洲专区中文字幕| 国产精品免费一区二区三区都可以| 亚洲欧美精品伊人久久| 欧美日韩激情网| 亚洲欧洲中文天堂|