js陣列相關面試題

2021-09-24 23:52:11 字數 1998 閱讀 4818

昨天去人人網面試,面試我的小姐姐讓我手寫一些關於陣列操作的**,我都寫出來了,但是面試官應該是不滿意我的實現方式,後來經過面試官的提示,又寫出了第二種方法,接下來就將這幾道面試題整理在下面。

第一題:[1,2,[3,4,[5,6]]]如何轉換成[1,2,3,4,5,6]

我一開始的思路很簡單,就是定義乙個全域性變數的空陣列,然後定義乙個方法,將原陣列傳遞到這個方法中,遍歷該陣列,判斷每乙個元素是不是陣列型別,如果是陣列型別的話就進行遞迴呼叫,如果不是陣列就將該元素push到新陣列中,從而達到面試官的要求,下面看一下我昨天實現的**。

定義全域性變數

let newarr =

原陣列

let arr =[1

,2,[

3,4,

[5,6

]]]

arrayconformity

(arr)

else

} console.

log(

this

.newarr)

}

對於該方法確實實現了面試官的需求,但是令人不怎麼爽的是,這樣就會增加全域性變數,所以面試官就給了我提示,讓我使用區域性變數來實現這個需求,思考了半天,思考出了個大概,就是像快速排序的道理一樣,當我提到類似快排的原理一樣面試官還挺高興下面我們來看一下第二種區域性變數的實現方式。

arraynewcon

(arr)

else

}return newarr

}

在這裡我們使用了concat的方式,類似快排一樣,將每次生成的陣列作為函式的返回值,然後當遞迴的時候拿到新的陣列和函式的返回值進行concat連線,切記,concat返回的是乙個新的陣列,所以需要把它賦值給newarr變數,否則會造成資料的丟失,這樣減少了全域性變數的產生,從**上看,這種實現比上面的實現好一些。

第二題:要求找出陣列中和為target的兩個元素並返回

首先我想到的第一種方式是雙層迴圈,遍歷,用每乙個元素和其他的元素進行相加比較,下面我們來看一下我寫的**

const arr =[1

,2,3

,4,5

,6,7

,8,9

,9]getnum

(arr)

的兩個元素是第

$個元素$和第

$個元素$`

)}}}

}

問題是解決了,既然解決了我們要想一想有沒有更優雅的方式來解決這個問題呢?畢竟這種方式是屬於暴力查詢的方式,而且在外面面試官也是不屑於這種寫法的,專業點說,時間複雜度高(咳咳……時間複雜度空間複雜度這一塊我了解的並不是很深入,也得加強學習,建議前端的同學們也去看一下資料結構),那麼,有沒有另一種方式來優雅的解決這個問題,答案是有的,之前面試官給了我乙個提示,這個陣列是有序的,一開始我並沒有明白這句話的含義,難怪我那麼菜,後來面試官告訴我了,為什麼會提示我這個陣列是有序的呢?因為,既然知道這個陣列是有序的,那麼我們就可以進行兩個迴圈,從左往右遍歷,然後從右往左遍歷,當兩個數的值小於target說明最左側的值要往後移動,最右側的值不用動(因為公升序陣列最右側的值最大),如果兩個數的和大於target需要將最右側的資料向左移動,以此類推,下面我們用**來實現以下。

getnums

(arr)

let left =

0let right = arr.length -

1while

(left < right)

else

if(arr[left]

+ arr[right]

> target)

else

的兩個元素是第

$個元素$和第

$個元素$`

) left ++

right --}}

}

如果不是有序陣列,那麼可以先對陣列進行排序,然後再使用該方法。

js基礎及相關面試題

js基本資料型別 string,object,number,undefined,boolean,function js陣列及其常用的方法 var arr new array arr i 1 新增資料 pop 刪除陣列的方法並返回刪除陣列的值 var arr new array 1,2,3 var d...

JS面試題 DOM操作相關

1 在dom中操作中怎麼建立 新增 刪除 移除 替換 插入和查詢節點 通過以下 建立節點 createdocumentfragment 建立乙個dom片段 createelement 建立乙個具體的元素 createtextnode 建立乙個文字節點 新增 移除 替換 插入節點 removechil...

面試題相關

一些位址 osi七層功能及協議 資料鏈路層是如何定址的?傳送方 已知接收方ip arp 接收方mac位址 交換機尋找該mac位址所在埠,把幀往這個埠 mac通過rarp轉為ip位址。可靠通訊是靠哪一層來完成的?網路層 tcp協議 100base t 100mbps,baseband,雙絞線對。簡而言...