我有5个变量:a
,b
,c
,d
和e
,它们的值取决于用户输入。现在我想根据它们的值按降序对这些变量进行排序,然后打印它们。例如,我有以下值:
a = 1, b = 1.5, c = 1, d = 3, e = 2
我想打印一个这样的列表:
d = 3
e = 2
b = 1.5
a = 1
c = 1
我试图使用关联数组来实现这一点,但我失败了,因为它没有编入索引。你能帮我解决这个问题吗?
答案 0 :(得分:2)
嗯,像
var vars = {a: 1, b: 1.5, c: 1, d: 3, e: 2}, keys = Object.keys(vars);
keys.sort(function (a, b) {
return vars[b] - vars[a];
});
keys.forEach(function (key) {
console.log(key + ' = ' + vars[key]);
});
似乎很好地完成了这个伎俩。请注意,这使用ES5 Object.keys,在某些浏览器中不支持,因此如果您希望它在Opera和IE中运行< 9,你必须做类似
的事情if (typeof Object.keys !== 'function') {
Object.keys = function (obj) {
var keys = [], i;
for (i in obj) {
if (obj.hasOwnProperty(i)) {
keys.push(i);
}
}
return keys;
};
}
哦,它也使用ES5 forEach,所以如果你需要使用IE< 9,你必须做类似
的事情if (typeof Array.prototype.forEach !== 'function') {
Array.prototype.forEach = function (func) {
for (var i = 0, l = this.length; i < l; i += 1) {
func(this[i], i);
}
};
}
答案 1 :(得分:0)
使用:arr = [ [ "a", 1 ], [ "b", 1.5 ], ... ]
和sort具有自定义排序功能的数组,该数组仅使用每个值中的第二项。