Javascript - 如何通过数据模型中的顺序获取密钥

时间:2015-07-30 03:18:01

标签: javascript

是否可以按顺序获取密钥。我有一个更改密钥的数据模型。

例如

{A: 1, k:2}

它会在某个时刻发生变化,但顺序会相同。例如

{J: 1, F:2}

有没有办法按顺序获取属性(第一,第二)??

3 个答案:

答案 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 (或任何其他特定顺序)添加的顺序排序。