簡體   English   中英

按鍵對對象進行排序,同時保留當前值以匹配數組順序

[英]Sort object by key whilst retaining present values to match order of array

我有兩個對象。 格式之一是(footerMenuOptions)

[{Home: true}, {About: false}, {Features: false}, {Contact: false}] 

第二個是格式(this.navbarMenuOptions)

["Home", "About", "Features", "Contact"]

有時,第二個對象(this.navbarMenuOptions)的順序會改變,比如說:

["About", "Home", "Features", "Contact"]

我希望第一個對象順序(footerMenuOptions)改變以能夠反映這一點(即鍵),但值保持不變)。

在鍵值對不存在的情況下,應該使用默認值 false 創建它(即如果this.navbarMenuOptions有一個新條目)。

實現這一目標的最有效方法是什么:

代碼如下:

toggleFooterMenuOptionVisibility(index: number) {
   // Some other stuff happens beforehand which isn't important
   footerMenuOptions = this.sortFooterMenuOptions(footerMenuOptions);
}

sortFooterMenuOptions(footerMenuOptions) {
   // this.navbarMenuOptions is a global variable so it doesn't need to be passed in
   return footerMenuOptions;
}

您可以使用主對象的鍵並從第二個數組中獲取索引,並通過這些索引對對象的鍵進行排序,如下所示:

 var arr1 = { Home: true, About: false, Features: false, Contact: false } var arr2 = ["About", "Home", "Features", "Contact"]; const ordered = {}; Object.keys(arr1).sort((a, b) => { return arr2.indexOf(a) - arr2.indexOf(b); }).forEach(r => ordered[r] = arr1[r]); console.log(ordered);

我假設您的對象有 1 個鍵,或者第一個鍵與第二個數組中的值相同。 所以如果我們把它應用到你的例子中,它應該變成這樣:

 sortFooterMenuOptions(unsortedFooterMenuOptions) { const sortedFooterMenuOptions = {}; Object.keys(unsortedFooterMenuOptions) .sort((a, b) => { return this.navbarMenuOptions.indexOf(a) - this.navbarMenuOptions.indexOf(b); }).forEach(r => sortedFooterMenuOptions[r] = unsortedFooterMenuOptions[r]); return sortedFooterMenuOptions; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM