⑴ js 遍歷["1","2","3"]
1.遍歷方式:
var arr = ["1","2","3"];
var str = "";
for(var i=0;i<arr.length;i++){
if(i<arr.length-1){
str += arr[i] + ",";
}else{
str += arr[i];
}
}
console.log(str);
2.一般你這個例子都是用var str = arr.join(",")直接轉換
⑵ 前端演算法入門一:刷演算法題常用的JS基礎掃盲
此篇屬於前端演算法入門系列的第一篇,主要介紹常用的 數組方法 、 字元串方法 、 遍歷方法 、 高階函數 、 正則表達式 以及相關 數學知識 。
在尾部追加,類似於壓棧,原數組會變。
在尾部彈出,類似於出棧,原數組會變。數組的 push & pop 可以模擬常見數據結構之一:棧。
在頭部壓入數據,類似於入隊,原數組會變。
在頭部彈出數據,原數組會變。數組的 push(入隊) & shift(出隊) 可以模擬常見數據結構之一:隊列。
concat會在當前數組尾部拼接傳入的數組,然後返回一個新數組,原數組不變。
在數組中尋找該值,找到則返回其下標,找不到則返回-1。
在數組中尋找該值,找到則返回true,找不到則返回false。
將數組轉化成字元串,並返回該字元串,不傳值則默認逗號隔開,原數組不變。
翻轉原數組,並返回已完成翻轉的數組,原數組改變。
從start 開始截取到end,但是不包括end
可參考 MDN:Sort
將數組轉化成字元串,並返回該字元串,逗號隔開,原數組不變。
返回指定索引位置處的字元。類似於數組用中括弧獲取相應下標位置的數據。
類似數組的concat(),用來返回一個合並拼接兩個或兩個以上字元串。原字元串不變。
indexOf,返回一個字元在字元串中首次出現的位置,lastIndexOf返回一個字元在字元串中最後一次出現的位置。
提取字元串的片斷,並把提取的字元串作為新的字元串返回出來。原字元串不變。
使用指定的分隔符將一個字元串拆分為多個子字元串數組並返回,原字元串不變。
match()方法可在字元串內檢索指定的值,或找到一個或多個正則表達式的匹配,並返回一個包含該搜索結果的數組。
注意事項 :如果match方法沒有找到匹配,將返回null。如果找到匹配,則 match方法會把匹配到以數組形式返回,如果正則規則未設置全局修飾符g,則 match方法返回的數組有兩個特性:input和index。input屬性包含整個被搜索的字元串。index屬性包含了在整個被搜索字元串中匹配的子字元串的位置。
replace接收兩個參數,參數一是需要替換掉的字元或者一個正則的匹配規則,參數二,需要替換進去的字元,仔實際的原理當中,參數二,你可以換成一個回調函數。
在目標字元串中搜索與正則規則相匹配的字元,搜索到,則返回第一個匹配項在目標字元串當中的位置,沒有搜索到則返回一個-1。
toLowerCase把字母轉換成小寫,toUpperCase()則是把字母轉換成大寫。
includes、startsWith、endsWith,es6的新增方法,includes 用來檢測目標字元串對象是否包含某個字元,返回一個布爾值,startsWith用來檢測當前字元是否是目標字元串的起始部分,相對的endwith是用來檢測是否是目標字元串的結尾部分。
返回一個新的字元串對象,新字元串等於重復了指定次數的原始字元串。接收一個參數,就是指定重復的次數。原字元串不變。
最常用的for循環,經常用的數組遍歷,也可以遍歷字元串。
while、do while主要的功能是,當滿足while後邊所跟的條件時,來執行相關業務。這兩個的區別是,while會先判斷是否滿足條件,然後再去執行花括弧裡面的任務,而do while則是先執行一次花括弧中的任務,再去執行while條件,判斷下次還是否再去執行do裡面的操作。也就是說 do while至少會執行一次操作 .
拷貝一份遍歷原數組。
for…of是ES6新增的方法,但是for…of不能去遍歷普通的對象, for…of的好處是可以使用break跳出循環。
面試官:說一下 for...in 和 for...of 區別?
返回一個布爾值 。當我們需要判定數組中的元素是否滿足某些條件時,可以使用every / some。這兩個的區別是,every會去判斷判斷數組中的每一項,而 some則是當某一項滿足條件時返回。
rece 從左到右將數組元素做「疊加」處理,返回一個值。receRight 從右到左。
Object.keys方法的參數是一個對象,返回一個數組。該數組的成員都是該對象自身的(而不是繼承的)所有屬性名,且只返回可枚舉的屬性。
Object.getOwnPropertyNames方法與Object.keys類似,也是接受一個對象作為參數,返回一個數組,包含了該對象自身的所有屬性名。但它能返回不可枚舉的屬性。
這里羅列一些我在刷演算法題中遇到的正則表達式,如果有時間可認真學一下正則表達式不要背。
持續更新,敬請期待……
若一個正整數無法被除了1 和它自身之外的任何自然數整除,則稱該數為質數(或素數),否則稱該正整數為合數。
持續更新,敬請期待……
作者:擺草猿
鏈接:https://juejin.cn/post/7087134135193436197
⑶ 2.簡單了解js中的幾種遍歷
方法:for, forEach,map,filter,every,some,in等
1. for循環,需要知道數組的長度,才能遍歷,
2. forEach循環,循環數組中每一個元素並採取操作, 沒有返回值, 可以不用知道數組長度
⑷ JS多維數組如何快速遍歷查詢
<script type="text/javascript">
//比如
var values=new Array();
values[0]="北京";
values[1]="天津";
....//其他省略
//遍歷1
for(var i=0;i<values.length;i ){
alert(values[i]);
}
//遍歷2
for(var ele in values){
alert(values[ele]);//下標
}
</script>
⑸ C語言編寫程序實現圖的遍歷操作
樓主你好,下面是源程序!
/*/////////////////////////////////////////////////////////////*/
/* 圖的深度優先遍歷 */
/*/////////////////////////////////////////////////////////////*/
#include <stdlib.h>
#include <stdio.h>
struct node /* 圖頂點結構定義 */
{
int vertex; /* 頂點數據信息 */
struct node *nextnode; /* 指下一頂點的指標 */
};
typedef struct node *graph; /* 圖形的結構新型態 */
struct node head[9]; /* 圖形頂點數組 */
int visited[9]; /* 遍歷標記數組 */
/********************根據已有的信息建立鄰接表********************/
void creategraph(int node[20][2],int num)/*num指的是圖的邊數*/
{
graph newnode; /*指向新節點的指針定義*/
graph ptr;
int from; /* 邊的起點 */
int to; /* 邊的終點 */
int i;
for ( i = 0; i < num; i++ ) /* 讀取邊線信息,插入鄰接表*/
{
from = node[i][0]; /* 邊線的起點 */
to = node[i][1]; /* 邊線的終點 */
/* 建立新頂點 */
newnode = ( graph ) malloc(sizeof(struct node));
newnode->vertex = to; /* 建立頂點內容 */
newnode->nextnode = NULL; /* 設定指標初值 */
ptr = &(head[from]); /* 頂點位置 */
while ( ptr->nextnode != NULL ) /* 遍歷至鏈表尾 */
ptr = ptr->nextnode; /* 下一個頂點 */
ptr->nextnode = newnode; /* 插入節點 */
}
}
/********************** 圖的深度優先搜尋法********************/
void dfs(int current)
{
graph ptr;
visited[current] = 1; /* 記錄已遍歷過 */
printf("vertex[%d]\n",current); /* 輸出遍歷頂點值 */
ptr = head[current].nextnode; /* 頂點位置 */
while ( ptr != NULL ) /* 遍歷至鏈表尾 */
{
if ( visited[ptr->vertex] == 0 ) /* 如過沒遍歷過 */
dfs(ptr->vertex); /* 遞回遍歷呼叫 */
ptr = ptr->nextnode; /* 下一個頂點 */
}
}
/****************************** 主程序******************************/
void main()
{
graph ptr;
int node[20][2] = { {1, 2}, {2, 1}, /* 邊線數組 */
{1, 3}, {3, 1},
{1, 4}, {4, 1},
{2, 5}, {5, 2},
{2, 6}, {6, 2},
{3, 7}, {7, 3},
{4, 7}, {4, 4},
{5, 8}, {8, 5},
{6, 7}, {7, 6},
{7, 8}, {8, 7} };
int i;
clrscr();
for ( i = 1; i <= 8; i++ ) /* 頂點數組初始化 */
{
head[i].vertex = i; /* 設定頂點值 */
head[i].nextnode = NULL; /* 指針為空 */
visited[i] = 0; /* 設定遍歷初始標志 */
}
creategraph(node,20); /* 建立鄰接表 */
printf("Content of the gragh's ADlist is:\n");
for ( i = 1; i <= 8; i++ )
{
printf("vertex%d ->",head[i].vertex); /* 頂點值 */
ptr = head[i].nextnode; /* 頂點位置 */
while ( ptr != NULL ) /* 遍歷至鏈表尾 */
{
printf(" %d ",ptr->vertex); /* 印出頂點內容 */
ptr = ptr->nextnode; /* 下一個頂點 */
}
printf("\n"); /* 換行 */
}
printf("\nThe end of the dfs are:\n");
dfs(1); /* 列印輸出遍歷過程 */
printf("\n"); /* 換行 */
puts(" Press any key to quit...");
getch();
}
/*//////////////////////////////////////////*/
/* 圖形的廣度優先搜尋法 */
/* ///////////////////////////////////////*/
#include <stdlib.h>
#include <stdio.h>
#define MAXQUEUE 10 /* 隊列的最大容量 */
struct node /* 圖的頂點結構定義 */
{
int vertex;
struct node *nextnode;
};
typedef struct node *graph; /* 圖的結構指針 */
struct node head[9]; /* 圖的頂點數組 */
int visited[9]; /* 遍歷標記數組 */
int queue[MAXQUEUE]; /* 定義序列數組 */
int front = -1; /* 序列前端 */
int rear = -1; /* 序列後端 */
/***********************二維數組向鄰接表的轉化****************************/
void creategraph(int node[20][2],int num)
{
graph newnode; /* 頂點指針 */
graph ptr;
int from; /* 邊起點 */
int to; /* 邊終點 */
int i;
for ( i = 0; i < num; i++ ) /* 第i條邊的信息處理 */
{
from = node[i][0]; /* 邊的起點 */
to = node[i][1]; /* 邊的終點 */
/* 建立新頂點 */
newnode = ( graph ) malloc(sizeof(struct node));
newnode->vertex = to; /* 頂點內容 */
newnode->nextnode = NULL; /* 設定指針初值 */
ptr = &(head[from]); /* 頂點位置 */
while ( ptr->nextnode != NULL ) /* 遍歷至鏈表尾 */
ptr = ptr->nextnode; /* 下一個頂點 */
ptr->nextnode = newnode; /* 插入第i個節點的鏈表尾部 */
}
}
/************************ 數值入隊列************************************/
int enqueue(int value)
{
if ( rear >= MAXQUEUE ) /* 檢查佇列是否全滿 */
return -1; /* 無法存入 */
rear++; /* 後端指標往前移 */
queue[rear] = value; /* 存入佇列 */
}
/************************* 數值出隊列*********************************/
int dequeue()
{
if ( front == rear ) /* 隊列是否為空 */
return -1; /* 為空,無法取出 */
front++; /* 前端指標往前移 */
return queue[front]; /* 從隊列中取出信息 */
}
/*********************** 圖形的廣度優先遍歷************************/
void bfs(int current)
{
graph ptr;
/* 處理第一個頂點 */
enqueue(current); /* 將頂點存入隊列 */
visited[current] = 1; /* 已遍歷過記錄標志置疑1*/
printf(" Vertex[%d]\n",current); /* 列印輸出遍歷頂點值 */
while ( front != rear ) /* 隊列是否為空 */
{
current = dequeue(); /* 將頂點從隊列列取出 */
ptr = head[current].nextnode; /* 頂點位置 */
while ( ptr != NULL ) /* 遍歷至鏈表尾 */
{
if ( visited[ptr->vertex] == 0 ) /*頂點沒有遍歷過*/
{
enqueue(ptr->vertex); /* 獎定點放入隊列 */
visited[ptr->vertex] = 1; /* 置遍歷標記為1 */
printf(" Vertex[%d]\n",ptr->vertex);/* 印出遍歷頂點值 */
}
ptr = ptr->nextnode; /* 下一個頂點 */
}
}
}
/*********************** 主程序 ************************************/
/*********************************************************************/
void main()
{
graph ptr;
int node[20][2] = { {1, 2}, {2, 1}, /* 邊信息數組 */
{6, 3}, {3, 6},
{2, 4}, {4, 2},
{1, 5}, {5, 1},
{3, 7}, {7, 3},
{1, 7}, {7, 1},
{4, 8}, {8, 4},
{5, 8}, {8, 5},
{2, 8}, {8, 2},
{7, 8}, {8, 7} };
int i;
clrscr();
puts("This is an example of Width Preferred Traverse of Gragh.\n");
for ( i = 1; i <= 8; i++ ) /*頂點結構數組初始化*/
{
head[i].vertex = i;
head[i].nextnode = NULL;
visited[i] = 0;
}
creategraph(node,20); /* 圖信息轉換,鄰接表的建立 */
printf("The content of the graph's allist is:\n");
for ( i = 1; i <= 8; i++ )
{
printf(" vertex%d =>",head[i].vertex); /* 頂點值 */
ptr = head[i].nextnode; /* 頂點位置 */
while ( ptr != NULL ) /* 遍歷至鏈表尾 */
{
printf(" %d ",ptr->vertex); /* 列印輸出頂點內容 */
ptr = ptr->nextnode; /* 下一個頂點 */
}
printf("\n"); /* 換行 */
}
printf("The contents of BFS are:\n");
bfs(1); /* 列印輸出遍歷過程 */
printf("\n"); /* 換行 */
puts(" Press any key to quit...");
getch();
}
⑹ 前端 遍歷數組對象然後拼接成一句話,包括逗號和空格
直接上代碼:
functionarr2Str(arr,connectStr){
varstr="";
connectStr=connectStr===void0?"":connectStr;
//遍歷數組
arr.forEach(ele=>{
//取出對應的值
for(varkeyinele){
//字元串拼接
str+=ele[key]+connectStr;
}
})
str=str.substr(0,str.length-1);
console.log(str);
returnstr;
}
//使用方法:
vartestArr=[{Name:"Talk2",Mole:"Intel",Who:"WLAN",Action:"can't",English:"beconnect"}];
arr2Str(testArr,"");//傳入需要拼接的數組和拼接符
運行效果如圖:
⑺ js數組遍歷的常用的幾種方法以及差異和性能優化
<script type="text/javascript">
/*對比:
1、map速度比foreach快
2、map會返回一個新數組,不對原數組產生影響,foreach不會產生新數組,foreach返回undefined
3、map因為返回數組所以可以鏈式操作,foreach不能
4, map里可以用return ,而foreach里用return不起作用,foreach不能用break,會直接報錯*/
/*方法一:*/
var arr1 = [1, 2, 3, 4, 5, 6];
for(var i = 0, len = arr1.length; i < len; i++) { //優化性能處理
console.log(arr1[i], 'for遍歷出來的數據'); //每個item 1,2,3,4,5,6
}
/*方法二:*/
/*forEach方法中的function回調支持3個參數,第1個是遍歷的數組內容;第2個是對應的數組索引,第3個是數組本身*/
var arr2 = [{
name: 'bob',
age: 20
},
{
name: 'tom',
age: 18
},
{
name: 'sos',
age: 19
}
]
arr2.forEach((val, i) => { //沒有返回值的,對原來數組也沒有影響
console.log(val, '遍歷出來的每個obj')
});
/*方法三:*/
var fruits = [1, 2, 3, 4, 5, 6, 7, 8];
let arr = fruits.map((item, index) => {
console.log(item, 'top')
console.log(index, 'top')
return item * 8
})
console.log(arr, 'newarr') //[8, 16, 24, 32, 40, 48, 56, 64] "newarr"
var a = fruits.indexOf("Apple", 4);
console.log(a)
//for 和 forEach都是普通循環,map 帶返回值並且返回一個新數組;
/*
*當前元素的值,當期元素的索引值,當期元素屬於的數組對象;
語法:array.map(function(currentValue,index,arr), thisValue)
map() 方法返回一個新數組,數組中的元素為原始數組元素調用函數處理後的值。
map() 方法按照原始數組元素順序依次處理元素。
注意: map() 不會對空數組進行檢測。
注意: map() 不會改變原始數組。
* */
/*方法四:*/
/*兼容寫法:
不管是forEach還是map在IE6 - 8 下都不兼容( 不兼容的情況下在Array.prototype上沒有這兩個方法), 那麼需要我們自己封裝一個都兼容的方法:*/
/**
* forEach遍歷數組
* @param callback [function] 回調函數;
* @param context [object] 上下文;
*/
Array.prototype.myForEach = function myForEach(callback, context) {
context = context || window;
if('forEach' in Array.prototye) {
this.forEach(callback, context);
return;
}
//IE6-8下自己編寫回調函數執行的邏輯
for(var i = 0, len = this.length; i < len; i++) {
callback && callback.call(context, this[i], i, this);
}
}
/**
* map遍歷數組
* @param callback [function] 回調函數;
* @param context [object] 上下文;
*/
Array.prototype.myMap = function myMap(callback, context) {
context = context || window;
if('map' in Array.prototye) {
return this.map(callback, context);
}
//IE6-8下自己編寫回調函數執行的邏輯var newAry = [];
for(var i = 0, len = this.length; i < len; i++) {
if(typeof callback === 'function') {
var val = callback.call(context, this[i], i, this);
newAry[newAry.length] = val;
}
}
return newAry;
}
</script>
⑻ 前端——遍歷函數理解
1.for循環
注意事項:for更多用於知道數組的長度的情況下
```
var obj = [1, 2, 3,4 ];
for(var a=0; a<obj.length;a++) //for循環三個參數 : 1.起始條件 2.終止條件 3.循環條件 。 可省略
{
console.log(obj[a])
}
```
2.forEach循環
注意事項:遍歷整個數組中所有的元素,沒有返回值
var obj =[1,'盼希',true,'ponX'];
obj.forEach((item,index)=>{
item='forEach用法,'+item;
console.log(item);
})
3.map函數·
注意事項:遍歷數組中的每個元素,並且回調,需要返回值,返回的值組成一個新的數組,原來的數組沒有發生變化
var obj =[1,'盼希',true,'ponX'];
var obj2=obj.map(function( item,index) {
item="map遍歷"+item;
console.log(item)
return item;
})
console.log("obj2", obj);
4.filter函數
注意事項:過濾符合條件的元素,並且組成一個新的數組 原數組不變
var obj =['1',2,'盼希',4,'HelloWorld',false];
var obj2=arr.filter(function(item,index) {
return typeof item==='number';
})
console.log(obj,obj2);
5.some函數
注意事項:遍歷數組中是否有符合條件的元素,返回的是boolean值
var obj =['2',5,'盼希',true,'HelloWorld',1];
var obj2=obj.some(function(item,index) {
return typeof item==='number';
})
console.log(obj,obj2);
6.every函數
注意事項:遍歷數組中是否有符合條件的元素,並且返回的是boolean值
var obj =['2',4,'盼希',true,'HelloWorld'];
var obj2=obj.every(function(item,index) {
return typeof item==='number';
})
console.log(obj,obj2);
7遍歷對象的方法: for..in
let obj ={c:'2',d:4,e:true};
for (var h in obj) {
console.log(obj[h],h)
}
console.log(obj);
⑼ web前端不是數組怎麼樣去遍歷
看情況而定 如果是偽數組可以進行轉換成真的數組在進行 for()循環遍歷
如果是對象可以通過for in 方式遍歷 取到鍵和值
⑽ Web前端工程師你知道JavaScript中常用的排序演算法嗎
今天小編要跟大家分享的文章是關於JavaScript中常用的排序演算法。相信很多剛剛從事Web前端工作或者准備面試的小夥伴們對此還不是很了解,下面就讓小編來為大家介紹一下吧!
一、冒泡排序
冒泡排序是我們在編程演算法中,算是比較常用的排序演算法之一,在學習階段,也是最需要接觸理解的演算法,所以我們放在第一個來學習。
演算法介紹:
·___冉舷嗔詰牧礁鱸,如果前一個比後一個大,則交換位置。
·___諞宦職炎畲蟮腦胤諾攪俗詈竺妗
·___捎諉看聞判蜃詈笠桓齠際親畲蟮模災蟀湊詹街1排序最後一個元素不用比較。
冒泡演算法改進:
設置一個標志,如果這一趟發生了交換,則為true。否則為false。如果這一趟沒有發生交換,則說明排序已經完成。代碼如下:
假如數組長度是20,如果只有前十位是無序排列的,後十位是有序且都大於前十位,所以第一趟遍歷排序的時候發生交換的位置必定小於10,且該位置之後的必定有序,我們只需要排序好該位置之前的就可以,因此我們要來標記這個位置就可以了,即可以記錄每次掃描中最後一次交換的位置,下次掃描的時候只要掃描到上次的最後交換位置就行了,因為後面的都是已經排好序的,無需再比較,代碼如下:
每一次循環從兩頭出發算出最大和最小值,代碼如下:
在代碼3的基礎上記錄每次掃描最後一次交換的位置,下次掃描的時候只要掃描到上次的最後交換位置就行,同代碼2,代碼如下:
二、快速排序
演算法介紹:
快速排序是對冒泡排序的一種改進,第一趟排序時將數據分成兩部分,一部分比另一部分的所有數據都要小。然後遞歸調用,在兩邊都實行快速排序。
三、選擇排序
演算法介紹:
選擇排序就是從一個未知數據空間里,選取之最放到一個新的空間
四、插入排序
演算法介紹:
·___擁諞桓瞿媳慌藕眯虻腦乜
·___〕魷亂桓鱸兀諞丫判虻腦匭蛄兄寫雍笙蚯吧_
·___綣雅判虻腦卮笥諶〕齙腦兀蚪浞直鶼蚝笠貧晃
·___鋇秸業揭雅判虻腦刂行∮諢虻扔諶〕齙腦兀〕齙腦胤諾剿暮笠晃
·___馗床街2
插入排序演算法改進-二分法插入排序:
以上就是小編今天為大家分享的JavaScript中常用的排序演算法的文章,文章中介紹的是四種比較基礎的排序方法,JavaScript的排序演算法還有很多,這是我們4種最常見也是最基本的演算法,掌握理解好,在面試和開發中也能從容應對了。想要了解更多Web前端知識記得關注北大青鳥Web培訓官網哦。最後祝願小夥伴們工作順利!
本文轉自前端研究所。
*聲明:內容與圖片均來源於網路(部分內容有修改),版權歸原作者所有,如來源信息有誤或侵犯權益,請聯系我們刪除或授權事宜。