最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用JavaScript遞歸函數(shù)封裝一個超級實用的轉(zhuǎn)換場景

 更新時間:2024年11月01日 08:21:48   作者:前端霧戀  
這篇文章主要為大家詳細介紹了如何使用JavaScript遞歸函數(shù)封裝一個超級實用的轉(zhuǎn)換場景,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下

場景

我相信很多同學(xué)都遇到過這樣的場景,如果一個數(shù)組中有一個name字段,但是我們在使用的時候需要的是title字段。如示例代碼:

const list = [{ name: '張三' }];
// 轉(zhuǎn)換為
const list = [{ title: '張三' }];

map方法

這是我們最簡單的方式,直接用map方法返回一個新數(shù)組即可,相當(dāng)簡單;但是我們在想一想,如果每一個對象還有一個children子數(shù)組呢?這種情況map就不太好處理了。 帶著這個考慮繼續(xù)往下看,這兒就不做太多介紹因為這太簡單了。

const list = [{ name: '張三' }];
console.log(list.map(v=>{
return { title: v.name }
}));

單場景版本

大家看以下代碼場景都寫了注釋的;

主要邏輯就是根據(jù)新值和舊值進行綁定然后賦值修改。然后我們在考慮這么一個場景?如果list里面的name在obj中,這種場景我們有應(yīng)該怎么做?

const list = [
{
  name: '張三',
  id: 6,
  children: [
    { name: '張三-第一個兒子', id: 1 },
    { name: '張三-第二個兒子', id: 2 },
  ]
},
{
  name: '李四',
  id: 5,
  children: [
    { name: '李四-第一個兒子', id: 3 },
    { name: '李四-第二個兒子', id: 4 },
  ]
}
];

/**
* props 示例: { title: 'name', children: 'children' },
* key值是生成新數(shù)組的值,value是舊數(shù)組的值
* */
function recursion(list, props) {
let data = [];
// 如果不是數(shù)據(jù)或者props為空就直接返回
if (!Array.isArray(list) || !props) return list; 
// .遍歷數(shù)組
for (let i = 0; i < list.length; i++) {
  // 保存一個對象
  let propsItem = {};
  // 遍歷修改值
  for (const key in props) {
    if (!list[i][props[key]]) continue;
    propsItem[key] = list[i][props[key]];
  }
  data.push(propsItem);
  // 如果子級是一個數(shù)組就遞歸賦值
  if (propsItem.children && Array.isArray(propsItem.children)) {
    data[i]['children'] = recursion(propsItem.children, props);
  }
};
return data;
};

const res = recursion(list, {
title: 'name',
children: 'children'
});
console.log('66', res);

適應(yīng)絕大部門場景封裝

我們查看以下示例的代碼可以發(fā)現(xiàn),不論是拿去對象內(nèi)對象的值還是對象里面的值都是可以的,基本上適用于絕大部分該類場景。大家在查看的時候可以針對代碼多看看都是有注釋的。

const list = [
    {
        id: 6,
        obj: { name: '張三' },
        children: [
            { obj: { name: '張三-第一個兒子', }, id: 1 },
            { obj: { name: '張三-第二個兒子', }, id: 2 },
        ]
    },
    {
        obj: { name: '李四' },
        id: 5,
        children: [
            { obj: { name: '李四-第一個兒子', }, id: 1 },
            { obj: { name: '李四-第二個兒子', }, id: 2 },
        ]
    }
];

/**
* props 示例: { title: 'obj.name', children: 'children' },
* key值是生成新數(shù)組的值,value是舊數(shù)組的值
* */
function recursion(list, props) {
    let data = [];
    // 如果不是數(shù)據(jù)或者props為空就直接返回
    if (!Array.isArray(list) || !props) return list;
    // .遍歷數(shù)組
    for (let i = 0; i < list.length; i++) {
        // 保存一個對象
        let propsItem = {};
        // 遍歷修改值
        for (const key in props) {
            // 將字符串轉(zhuǎn)為數(shù)組
            const propsKey = props[key].toString().split('.');
            // 如果數(shù)組大于等于2取其對象里面的值,反之直接拿key值
            const propsChild = propsKey.length >= 2 ? list[i][propsKey[0]][propsKey[1]] :
                propsKey.length === 1 ? list[i][propsKey[0]] : null;
            // 如果為空跳槽循環(huán)
            if (!propsChild) continue;
            propsItem[key] = propsChild;
        }
        data.push(propsItem)
        // 如果子級是一個數(shù)組就遞歸賦值
        if (propsItem.children && Array.isArray(propsItem.children)) {
            data[i]['children'] = recursion(propsItem.children, props);
        }
    };
    return data;
};

const res = recursion(list, {
    title: 'obj.name',
    children: 'children'
});
console.log('66', res);

到此這篇關(guān)于使用JavaScript遞歸函數(shù)封裝一個超級實用的轉(zhuǎn)換場景的文章就介紹到這了,更多相關(guān)JavaScript遞歸函數(shù)封裝轉(zhuǎn)換場景內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • AI小程序之語音聽寫來了,十分鐘掌握百度大腦語音聽寫全攻略

    AI小程序之語音聽寫來了,十分鐘掌握百度大腦語音聽寫全攻略

    語音識別極速版能將60秒以內(nèi)的完整音頻文件識別為文字,本文主要介紹采用百度語音識別,實現(xiàn)小程序的聽寫功能,感興趣的同學(xué)可以來了解一下
    2020-03-03
  • JavaScript中的事件循環(huán)機制解讀

    JavaScript中的事件循環(huán)機制解讀

    本文全面介紹了JavaScript的事件循環(huán)機制,包括其基本概念、組成部分、任務(wù)隊列的詳細解釋、完整的執(zhí)行流程、實際代碼演示、瀏覽器與Node.js的區(qū)別、常見面試題分析以及性能優(yōu)化技巧,通過記憶口訣“同微宏,微先走,宏之后,微清空”,幫助讀者更好地理解和應(yīng)用事件循環(huán)機制
    2025-10-10
  • Javascript的比較匯總

    Javascript的比較匯總

    本文匯總了Javascript中兩個對象的比較、不同類型的比較以及對象跟原始值的比較,并進行了實例演示,希望能幫助到有需要的朋友們。
    2016-07-07
  • HTML+JS實現(xiàn)經(jīng)典推箱子游戲

    HTML+JS實現(xiàn)經(jīng)典推箱子游戲

    今天,這篇文章將利用HTML,CSS,JS的知識編寫一個童年經(jīng)典游戲?-?推箱子,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-11-11
  • 使用js獲取圖片原始尺寸

    使用js獲取圖片原始尺寸

    本文給大家推薦的是一個使用js獲取圖片的原始尺寸的例子,從本人項目中摳出來的,這里奉獻給大家,有需要的直接拿走。
    2014-12-12
  • JavaScript 學(xué)習(xí)筆記(七)字符串的連接

    JavaScript 學(xué)習(xí)筆記(七)字符串的連接

    javascript 字符串的連接效率問題,需要的朋友可以參考下。
    2009-12-12
  • JavaScript制作彈出層效果

    JavaScript制作彈出層效果

    彈出層效果大家在網(wǎng)站上經(jīng)常遇到此功能,下面小編給大家分享一段js代碼制作彈出層效果,代碼簡單易懂,非常不錯,需要的朋友參考下吧
    2016-12-12
  • 微信小程序結(jié)合Storage實現(xiàn)搜索歷史效果

    微信小程序結(jié)合Storage實現(xiàn)搜索歷史效果

    這篇文章主要為大家詳細介紹了微信小程序結(jié)合Storage實現(xiàn)搜索歷史效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • js獲取json元素數(shù)量的方法

    js獲取json元素數(shù)量的方法

    這篇文章主要介紹了js獲取json元素數(shù)量的方法,可實現(xiàn)對json元素數(shù)量的統(tǒng)計功能,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-01-01
  • JS前端文件讀取FileReader操作方法總結(jié)

    JS前端文件讀取FileReader操作方法總結(jié)

    FileReader?包含了一套完整的事件模型,用于捕獲讀取文件時的狀態(tài),下面這篇文章主要給大家介紹了關(guān)于JS前端文件讀取FileReader操作方法的相關(guān)資料,需要的朋友可以參考下
    2024-08-08

最新評論

定边县| 涞源县| 科技| 洛扎县| 东方市| 邵武市| 合阳县| 江口县| 沂水县| 衢州市| 廉江市| 宁国市| 公安县| 长丰县| 长子县| 青神县| 辽宁省| 嵩明县| 浦东新区| 辽宁省| 乐平市| 洛浦县| 万州区| 舟山市| 昌邑市| 乌恰县| 安新县| 湟中县| 吉林省| 甘南县| 晋宁县| 简阳市| 麟游县| 略阳县| 清远市| 浮梁县| 朔州市| 临城县| 黔南| 济南市| 望谟县|