簡體   English   中英

Typescript - 從字典或數組中動態獲取下一個和上一個項目

[英]Typescript - Get next and previous item from dictionary or array dynamically

我是 Angular 的新手,目前正在開發 Angular 5 應用程序。 我需要從字典(模型)中獲取下一個或上一個項目,以便下一個和上一個導航來獲取路線。 我查看了多篇文章並提出了以下方法。 讓我知道是否有其他有效和可靠的方法來做到這一點。 我還需要確保它按值排序以確保它在服務器(api)和客戶端之間保留相同的順序。 這將是我們應用程序導航的重要方法,因此我想確保沒有瀏覽器兼容性問題,沒有缺點且可靠。 最壞的情況是,我可以使用常規的 switch case 語句,它在多個條件下會很丑,但可以。 讓我知道你的想法。 提前致謝

 var dict = { "name3": 12, "name1": 5, "name2": 8 }; var items = sortProperties(dict); //console.log(items); var getItem = function(key, i) { var index = 0; var stop = true; for (var j = 0; j < items.length; j++) { if (items[j][0] == key) { index = j; break;// Found it } } console.log(index); if((index + i) > -1 && (index+i) <items.length) { return items[index+i][0]; } else { return 'empty'; } } console.log(getItem("name2",-1)); console.log(getItem("name2",+1)); function sortProperties(obj) { // convert object into array var sortable=[]; for(var key in obj) if(obj.hasOwnProperty(key)) sortable.push([key, obj[key]]); // each item is an array in format [key, value] // sort items by value sortable.sort(function(a, b) { return a[1]-b[1]; // compare numbers }); return sortable; // array in format [ [ key1, val1 ], [ key2, val2 ], ... ] }

根據規范,對象中的屬性沒有內在順序。 雖然在實踐中該順序是確定性的,但依賴它是一個壞主意。

每次想要下一個或上一個屬性時都對屬性進行排序,這在不故意使情況變得更糟的情況下效率低下。 至少使用一個數組來永久存儲您的(排序的)條目。

如果這些操作(下一個上一個)是您計划對您的結構進行的主要操作,並且其中可能有很多項目,您應該使用一個可以廉價執行操作的結構:雙向鏈表

如果您既想要那個又想要便宜的直接訪問,則必須在某處付費。 一種解決方案是使用數組或 Map 進行廉價的直接訪問,並維護其中所有項目的nextprevious屬性,使其也具有鏈表行為。 每次改變結構時,你都會為此付出代價,但這可能沒問題,特別是如果它不經常改變的話。

暫無
暫無

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

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