亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

對具有嵌套級別的對象數組進行分組

對具有嵌套級別的對象數組進行分組

慕森卡 2023-04-14 15:14:51
我有一個表格模式數組對象,如下所示,直到 n 級。它可以是任何父母孩子的記錄var records = [  { country: "USA", state: "FLORIDA", city: "city1" },  { country: "USA", state: "FLORIDA", city: "city2" },  { country: "USA", state: "FLORIDA", city:"city3" },  { country: "USA", state: "ALASKA" },  { country: "USA", state: "ALBAMA" },]var columns = ["country","state","city"]  // upto n column我需要按以下格式對第 n 級進行分組,因為可以有 n 級關系,按以下格式對記錄進行分組{  sequencer: 1, value: 'USA', loop: [    { sequencer: 1, value: 'FLORIDA', loop: [      { sequencer: 1, value: 'city1' },      { sequencer: 2, value: 'city2' },      { sequencer: 3, value: 'city3' },    ], },    { sequencer: 2, value: 'ALASKA' },    { sequencer: 3, value: 'ALBAMA' },  ],}有人可以編寫一個遞歸函數來對 n 級列對象進行分組。謝謝
查看完整描述

2 回答

?
翻過高山走不出你

TA貢獻1875條經驗 獲得超3個贊

您可以通過避免不需要的循環屬性來對數據進行分組。


const

    data = [{ country: "USA", state: "FLORIDA", city: "city1" }, { country: "USA", state: "FLORIDA", city: "city2" }, { country: "USA", state: "FLORIDA", city: "city3" }, { country: "USA", state: "ALASKA" }, { country: "USA", state: "ALBAMA" }],

    keys = ['country', 'state', 'city'],

    result = data.reduce((loop, o) => {

        keys

            .map(k => o[k])

            .filter(Boolean)

            .reduce((r, value) => {

                let temp = (r.loop ??= []).find(q => q.value === value);

                if (!temp) r.loop.push(temp = { sequence: r.loop.length + 1, value });

                return temp;

            }, { loop });

        return loop;

    }, []);


console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }


查看完整回答
反對 回復 2023-04-14
?
慕標琳琳

TA貢獻1830條經驗 獲得超9個贊

你可以寫你的transform使用flatMap和遞歸 -

const transform = ([ name, ...more ], { value, loop = [{}] }, r = {}) =>

? name === undefined

? ? ? [ r ]

? ? : loop.flatMap(t => transform(more, t, { [name]: value, ...r }))


const records =

? {sequencer:1,value:'USA',loop:[{sequencer:1,value:'FLORIDA',loop:[{sequencer:1,value:'city1'},{sequencer:2,value:'city2'},{sequencer:3,value:'city3'}]},{sequencer:2,value:'ALASKA'},{sequencer:3,value:'ALBAMA'}]}


const columns =

? ['country', 'state', 'city']


const result =

? transform(["country", "state", "city"], records)

??

console.log(JSON.stringify(result, null, 2))

function等同于上述表達式的語句=>-


function transform

? ( [ name, ...more ]

? , { value, loop = [{}] }

? , r = {}

? )

? { if (name === undefined)

? ? ? return [ r ]

? ? else?

? ? ? return loop.flatMap

? ? ? ? ( t =>

? ? ? ? ? ? transform

? ? ? ? ? ? ? ( more

? ? ? ? ? ? ? , t

? ? ? ? ? ? ? , { [name]: value, ...r }

? ? ? ? ? ? ? )

? ? ? ? )

? }



查看完整回答
反對 回復 2023-04-14
  • 2 回答
  • 0 關注
  • 129 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號