是否可以按顺序获取密钥。我有一个更改密钥的数据模型。
例如
{A: 1, k:2}
它会在某个时刻发生变化,但顺序会相同。例如
{J: 1, F:2}
有没有办法按顺序获取属性(第一,第二)??
答案 0 :(得分:3)
字典没有顺序,所以你可以做的是将它转换为一对数组,对它进行排序然后迭代它。
var arr = {A:300, B:60, C:200}
var sortable = [];
for (var el in arr)
sortable.push([el, arr[el]])
sortable.sort(function(a, b) {return a[1] - b[1]})
//[["B", 60], ["C", 200], ["A", 300],
答案 1 :(得分:0)
如果您以相反的顺序存储键值对,以数字作为键,字母作为属性,那么您将能够获得所需的顺序。
答案 2 :(得分:0)
基于Patrick发布的内容,您可以创建按其值排序的键的索引:
var obj = {A: 1, k:7, q:0, z:4};
var index = Object.keys(obj).sort(function(a, b) {
return obj[a] - obj[b];
});
// Keys sorted by value
console.log(index.join()); // q,A,z,k
// Get 2nd highest value
console.log(obj[index[1]]) // 1
// Get highest value
console.log(obj[index[index.length - 1]]) // 7
如果value.toString()
返回唯一值,您还可以创建有价值的对象:密钥对:
// Create a reversed object of value:key
var revObj = Object.keys(obj).reduce(function(newObj, key){
newObj[obj[key]] = key;
return newObj;
}, {});
console.log(JSON.stringify(revObj)); // {"0":"q","1":"A","4":"z","7":"k"}
请注意,在某些浏览器中,键是按数值排序的,而不是按 revObj (或任何其他特定顺序)添加的顺序排序。