【发布时间】:2019-02-24 18:33:49
【问题描述】:
我是 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 ], ... ]
}
【问题讨论】:
-
您最好使用数组,因为 JavaScript 属性顺序无法保证。如果您有一个对象,则将其转换为数组。
-
@danday74 数组中的顺序是否保持相同的黑白 api 和客户端?即,它会以添加方式保留订单吗?谢谢
-
另外,如果数组总是排序并且分布不是太极端,您可以进行某种乐观的 log(n) 查找(如二进制搜索),而不是盲目地遍历整个事物。
-
是的,它会保证订单保持不变——当你 .push() 你添加到最后——当你 .unshift() 你添加到开头
-
要在数组中查找对象,您应该像这样使用 lodash find ... stackoverflow.com/questions/31054021/… ... JS 世界中的大多数人都使用 lodash - 它提供了大量的函数来生成数组操作简单等等 - 它是最流行的 JS lib 和 npm 模块
标签: javascript angular typescript