欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

場景

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

const list = [{ name: '張三' }];
// 轉換為
const list = [{ title: '張三' }];

map方法

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

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

單場景版本

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

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

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);

適應絕大部門場景封裝

我們查看以下示例的代碼可以發(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) {
            // 將字符串轉為數(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);

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

相關文章

  • JS實現(xiàn)隨頁面滾動顯示/隱藏窗口固定位置元素

    JS實現(xiàn)隨頁面滾動顯示/隱藏窗口固定位置元素

    窗口固定位置顯示元素,當頁面高度大于某高度,并且頁面向下滾動時,顯示該元素;當頁面位置小于某高度,或者頁面向上滾動時,隱藏該元素,下面通過本文給大家介紹JS實現(xiàn)隨頁面滾動顯示/隱藏窗口固定位置元素,需要的朋友參考下吧
    2016-02-02
  • 原生JS實現(xiàn)移動端web輪播圖詳解(結合Tween算法造輪子)

    原生JS實現(xiàn)移動端web輪播圖詳解(結合Tween算法造輪子)

    在做移動端開發(fā)的時候,必不可少的是輪播圖,下面這篇文章主要給大家介紹了關于利用純JS實現(xiàn)移動端web輪播圖的相關資料,重要的是結合Tween算法造輪子,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-09-09
  • 某人初學javascript的時候寫的學習筆記

    某人初學javascript的時候寫的學習筆記

    JavaScript對象就是一組屬性(方法)的集合 在該語言中如果變量名或方法名不符合聲明規(guī)范,則一定得用方括號“ [] ”引用它
    2010-12-12
  • Javascript跨域請求的4種解決方式

    Javascript跨域請求的4種解決方式

    如果所請求的域名跟這個域名不致,這種情況就是跨域,由于跨域存在漏洞,所以一般來說正常的跨域請求方式是請求不到的,所以有了本文的出現(xiàn),感興趣的你可以參考下哈,希望可以幫助到你
    2013-03-03
  • 第一次記錄Bootstrap table學習筆記(1)

    第一次記錄Bootstrap table學習筆記(1)

    這篇文章主要為大家介紹了第一次學習Bootstrap table表格插件的筆記,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • JS實現(xiàn)基數(shù)排序的示例代碼

    JS實現(xiàn)基數(shù)排序的示例代碼

    基數(shù)排序是一種根據(jù)數(shù)字位數(shù)的值,對整數(shù)進行排序的算法,本文主要介紹了JS實現(xiàn)基數(shù)排序的示例代碼,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • js浮點數(shù)精確計算(加、減、乘、除)

    js浮點數(shù)精確計算(加、減、乘、除)

    本篇文章主要介紹了js浮點數(shù)精確計算(加、減、乘、除) 需要的朋友可以過來參考下,希望對大家有所幫助
    2013-12-12
  • 詳解webpack4多入口、多頁面項目構建案例

    詳解webpack4多入口、多頁面項目構建案例

    這篇文章主要介紹了詳解webpack4多入口、多頁面項目構建案例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • IE下JS保存圖片的簡單實例

    IE下JS保存圖片的簡單實例

    下面小編就為大家?guī)硪黄狪E下JS保存圖片的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • JS中國標準時間轉化為年月日時分秒'yyyy-MM-dd hh:mm:ss'的示例詳解

    JS中國標準時間轉化為年月日時分秒'yyyy-MM-dd hh:mm:ss'的示例詳解

    這篇文章主要介紹了JS中國標準時間轉化為年月日時分秒‘yyyy-MM-dd hh:mm:ss‘的相關知識,通過示例代碼介紹了,Js各種時間轉換問題(YYYY-MM-DD 時間戳 中國標準時間),需要的朋友可以參考下
    2024-02-02

最新評論