新聞中心
在了解具體實(shí)現(xiàn)方法之前?就是將多層嵌套的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為一個(gè)只包含基本類型值(數(shù)值、字符串、布爾值)或者對(duì)象類型值(沒有子屬性)的一維結(jié)構(gòu),首先定義一個(gè)函數(shù)`flatten(arr)`,
- 本文目錄導(dǎo)讀:
- 1、什么是數(shù)組扁平化?
- 2、方法一:遞歸法
- 3、方法二:迭代法

茫崖網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)公司自2013年創(chuàng)立以來(lái)到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司。
在 JavaScript 中,數(shù)組往往是我們經(jīng)常使用的數(shù)據(jù)結(jié)構(gòu)之一。但有時(shí)候我們需要將多層嵌套的數(shù)組轉(zhuǎn)換成一維數(shù)組,這就是所謂的“扁平化”。今天我來(lái)和大家分享一下如何用純手寫代碼實(shí)現(xiàn) JavaScript 數(shù)組扁平化。
什么是數(shù)組扁平化?
在了解具體實(shí)現(xiàn)方法之前,讓我們先明確一下什么是“數(shù)組扁平化”。
簡(jiǎn)單來(lái)說,“扁平化”就是將多層嵌套的數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為一個(gè)只包含基本類型值(數(shù)值、字符串、布爾值)或者對(duì)象類型值(沒有子屬性)的一維結(jié)構(gòu)。比如:
```
[1, [2, 3], [[4], 5]]
通過“扁平化”,可以得到:
[1, 2, 3, 4, 5]
方法一:遞歸法
第一個(gè)方法是最常見也最容易想到的——遞歸法。
首先定義一個(gè)函數(shù)`flatten(arr)`,它接受一個(gè)參數(shù) arr,并返回處理后的結(jié)果。如果傳入?yún)?shù)不為 Array 類型,則直接返回該參數(shù);否則遍歷該數(shù)組并檢查每個(gè)元素是否為 Array 類型。若不是,則將其添加至結(jié)果集中;若是,則遞歸調(diào)用`flatten()`函數(shù),并將返回值與結(jié)果集合并。最后返回結(jié)果集即可。
function flatten(arr) {
var result = [];
for (var i = 0, len = arr.length; i < len; i++) {
if (Array.isArray(arr[i])) {
result = result.concat(flatten(arr[i]));
} else {
result.push(arr[i]);
}
}
return result;
}
方法二:迭代法
第二個(gè)方法是使用迭代來(lái)實(shí)現(xiàn)數(shù)組扁平化。
首先定義一個(gè)函數(shù)`flatten2(arr)`,它接受一個(gè)參數(shù) arr,并返回處理后的結(jié)果。然后我們需要一個(gè) while 循環(huán)來(lái)不斷遍歷數(shù)組,直到該數(shù)組中沒有嵌套的子數(shù)組為止。在循環(huán)內(nèi)部,我們判斷當(dāng)前元素是否為 Array 類型,如果是就展開這個(gè)子數(shù)組(通過 concat 方法),否則就添加至結(jié)果集中。
function flatten2(arr) {
var stack = [...arr];
while(stack.length !==0){
const val=stack.pop();
if(Array.isArray(val)){
stack.push(...val);
}else{
res.unshift(val)
}
}
return res
今天我和大家分享了兩種純手寫代碼實(shí)現(xiàn) JavaScript 數(shù)組扁平化的方法——遞歸法和迭代法。無(wú)論哪一種方式都可以達(dá)到同樣的效果,在具體應(yīng)用場(chǎng)景下選擇相應(yīng)的方法即可。
最后,我想說的是:在實(shí)際開發(fā)中,我們需要注意代碼的可讀性、健壯性以及效率等問題。寫好 JavaScript 代碼不僅能提高開發(fā)效率,還可以讓我們更好地理解和掌握這門語(yǔ)言。
本文標(biāo)題:JS手寫面試題:如何實(shí)現(xiàn)數(shù)組扁平化?
轉(zhuǎn)載源于:http://www.dlmjj.cn/article/dhedops.html


咨詢
建站咨詢
