我是Angular的新手,目前正在Angular 5应用程序上工作。我需要从dictionary(model)获取下一个或上一个项目,以便进行下一个和上一个导航以获取路线。我研究了多篇文章,并提出了以下方法。让我知道是否还有其他有效且可靠的方式来做到这一点。我还需要确保其按值排序,以确保在server(api)和client之间保持相同的顺序。这将是我们应用程序导航的重要方法,因此我想确保没有浏览器兼容性问题,没有缺点以及它的可靠性。最坏的情况是我可以使用常规的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 ], ... ]
}
答案 0 :(得分:2)
根据规范,对象中没有固有的属性顺序。在实践中,顺序是确定性的,但是依赖它是一个坏主意。
每次您想要下一个或上一个属性时,对属性进行排序的效率将达到尽可能低的水平,而不会故意使其变差。至少使用数组永久存储您的(排序的)条目。
如果这些操作(下一个和上一个)是您打算对结构进行的主要工作,并且其中有很多项目,则应使用一种廉价执行操作的结构:doubly-linked list。
如果您既想要直接访问又便宜的直接访问,则必须在某个地方付费。一种解决方案是使用数组或Map进行廉价的直接访问,并在其中的所有项目上维护print
和next
属性,使其也具有链接列表行为。每次您对结构进行变异时,您都需要为此付费,但这可能是可以的,尤其是当它不经常更改时。