主頁 >  其他 > 如何按parentIdJS對物件陣列進行排序

如何按parentIdJS對物件陣列進行排序

2022-09-15 15:28:24 其他

如何對這個陣列進行排序?我試圖從陣列的parentId每個元素帶來的物件陣列中分組,總是可以有不確定數量的級別,我期望的結果是我在輸出中的結果。

輸入:

[
  {
    "_id": "123",
    "name": "ABC",
    "parentID": ""
  },
  {
    "_id": "645",
    "name": "ABC 2",
    "parentID": "123"
  },
  {
    "_id": "65",
    "name": "ABC 3",
    "parentID": ""
  }
]

輸出:

[
  {
    "_id": "123",
    "name": "ABC",
    "parentID": "",
    "children": [
      {
        "_id": "645",
        "name": "ABC 2",
        "parentID": "123"
      },
    ]
  },
  {
    "_id": "65",
    "name": "ABC 3",
    "parentID": ""
  }
]

感謝幫助

uj5u.com熱心網友回復:

您可以嘗試使用這種方法reducefilter

const input = [{
    "_id": "123",
    "name": "ABC",
    "parentID": ""
  },
  {
    "_id": "645",
    "name": "ABC 2",
    "parentID": "123"
  },
  {
    "_id": "65",
    "name": "ABC 3",
    "parentID": ""
  }
]

function mapChildren(data) {
  //set the output with all results having no parent ids by default
  let output = data.filter(x => !x.parentId)

  //add children to existing results
  output = data.reduce((result, current) => {
    const {
      parentID
    } = current

    if (!parentID) {
      return result
    }

    const existingRecord = result.find(x => x._id === parentID)

    if (existingRecord) {
      if(!existingRecord.children) {
        existingRecord.children = []
      }
    
      existingRecord.children.push({...current})
    }

    return result

  }, output)

  return output
}

console.log(mapChildren(input))

uj5u.com熱心網友回復:

甚至適用于嵌套的孩子:

const input = [{
        "_id": "123",
        "name": "ABC",
        "parentID": ""
    },
    {
        "_id": "645",
        "name": "ABC 2",
        "parentID": "123"
    },
    {
        "_id": "65",
        "name": "ABC 3",
        "parentID": "645"
    }
]

function map(data) {
    const childMap = data.reduce((map, child) => {
        return {
            ...map,
            [child._id]: {
                ...child
            }
        };
    }, {});

    const root = [];

    Object.values(childMap).forEach((child) => {
        if (child.parentID) {
            if (childMap[child.parentID]) {
                const parent = childMap[child.parentID];
                if (!parent.children) {
                    parent.children = [];
                }

                parent.children.push(child)
            }
        } else {
            root.push(child);
        }
    })

    return root;
}

console.log(map(input));

uj5u.com熱心網友回復:

像這樣的東西是資料庫引擎的作業。您不應該在控制器方面執行此操作。模型應該以您想要的方式向您發送資料。只需要求后端人員使用這樣發送的資料進行路由,或者只是if在您的資料決議方法中添加一些陳述句,以根據物件是否具有 parentId 來做不同的事情。

但是如果你真的想在前端做,你可以這樣做:

const data = [
    {
        _id: '123',
        name: 'ABC',
        parentID: '',
    },
    {
        _id: '645',
        name: 'ABC 2',
        parentID: '123',
    },
    {
        _id: '65',
        name: 'ABC 3',
        parentID: '',
    },
];

const restructureData = (data) => {
    const children = data.filter((object) => object.parentID);
    const parents = data.filter((object) => !object.parentID);

    for (let i = 0; i < children.length; i  ) {
        let parentIndex = parents
            .map((object) => object._id)
            .indexOf(children[i].parentID);
        if (!parents[parentIndex].children) {
            parents[parentIndex].children = [];
        }
        parents[parentIndex].children.push(children[i]);
    }
    return parents;
};

console.log(restructureData(data));

但是,這不適用于嵌套的孩子。

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/508257.html

標籤:javascript 数组 目的

上一篇:如何在打字稿中宣告壓縮串列的專案型別?

下一篇:返回列表

標籤雲
其他(144758) Python(37215) JavaScript(24809) Java(16400) C(14940) 區塊鏈(8236) C#(7949) AI(7469) 爪哇(7384) html(6762) MySQL(6705) 基礎類(6313) sql(6080) 熊猫(6051) PHP(5774) 数组(5729) R(5303) Linux(5173) 反应(5157) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4408) 数据框(4307) css(4245) 节点.js(4010) C語言(3288) json(3233) C++語言(3117) 列表(3116) 扑(3071) 安卓(2989) 打字稿(2941) VBA(2771) Java相關(2746) 疑難問題(2699) 细绳(2521) 單片機工控(2479) iOS(2378) ASP.NET(2364) MongoDB(2314) 麻木的(2284) 正则表达式(2218) 字典(2211) 循环(2196) 迅速(2157) 擅长(2149) 镖(2146) 功能(1965) Web開發(1951) python-3.x(1912) 弹簧靴(1900) xml(1865) for循环(1841) 谷歌表格(1836) Unity3D(1822) PostgreSQL(1803) 網絡通信(1793) .NETCore(1787) .NET技术(1786) 蟒蛇-3.x(1774)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 如何按parentIdJS對物件陣列進行排序

    如何對這個陣列進行排序?我試圖從陣列的parentId每個元素帶來的物件陣列中分組,總是可以有不確定數量的級別,我期望的結果是我在輸出中的結果。輸入:[ { "_...

    uj5u.com 2022-09-15 15:28:24 more
  • 如何在打字稿中宣告壓縮串列的專案型別?

    我有兩個這樣的串列:arr1 = [object, object, object...]arr2 = [10, 2, 5,...]并使用 zip 將它們組合起來:let zip = arr1.map((x:object, i:number) => [x,...

    uj5u.com 2022-09-15 15:27:27 more
  • 是否可以反轉多個XOR和位移操作的最終單個數字輸出

    我有一個用 JS 撰寫的將x、y、z決議為 1 個數字的代碼。是否有可能僅通過知道最終數字和對其進行的操作來以某種方式恢復操作并回傳x,y,z ?我在 rever 函式...

    uj5u.com 2022-09-15 15:26:32 more
  • 為下拉選單選擇添加占位符照片

    我正在嘗試在段落標簽中添加占位符影像。用戶選擇一個選項,照片將替換為所選的照片。我曾嘗試將照片添加為第一個選項的價值,但沒有奏效。請問有什么想法嗎?se...

    uj5u.com 2022-09-15 15:25:42 more
  • 如何使用純Javascript獲取時間標簽內的文本?

    我的代碼中有兩個時間標簽。我必須簡單地在第二次標簽內獲取文本。var children=document.getElementByClassName("entry-date published").textContent;do...

    uj5u.com 2022-09-15 15:24:23 more
  • 如何將資料庫表中的日期顯示到日期文本欄位

    我有一個帶有列的資料庫表Birthdate。我想將 db 表中的日期顯示到我的網路表單上的“日期”文本欄位中。例如,我的資料庫表Birthdate列中的資料是“2000 年...

    uj5u.com 2022-09-15 13:59:15 more
  • 在SQL中映射列值

    我有一個名為 table1 的表,其中有一列名為 col1,其取值范圍為 1-9。table1col119 7 2 4 6 1 9 3 5 現在我想添加另一列...

    uj5u.com 2022-09-15 13:58:22 more
  • Hibernate不保存物體

    我對休眠真的很陌生,并試圖了解它是如何作業的。但知道我面臨著這個問題。首先,我有這樣的映射:@Entitypublic class Author { @Id @GeneratedValue(str...

    uj5u.com 2022-09-15 13:54:20 more
  • 如何通過其父容器的形狀切斷子元素的可見性?

    我想在網頁上添加一些文本,這些文本將顯示在容器的右邊緣。我能想到的唯一方法是將文本的顏色偽裝成外部容器的背景顏色。但是這種實作是非常冒險的,因為外部...

    uj5u.com 2022-09-15 13:50:59 more
  • 即使設定為1fr,img也不會占用網格容器的全寬

    我正在嘗試創建一個書店頁面,我希望兩張卡片分別占據頁面的一半(間隙為 20 像素)。我已經將父級 .book-cards 設定為 1fr 1fr 并將 card-top 設定為 width: 10...

    uj5u.com 2022-09-15 13:50:17 more