根据值的变化对变量进行排序,然后打印它们

时间:2011-08-20 18:53:44

标签: javascript

我有5个变量:abcde,它们的值取决于用户输入。现在我想根据它们的值按降序对这些变量进行排序,然后打印它们。例如,我有以下值:

a = 1, b = 1.5, c = 1, d = 3, e = 2

我想打印一个这样的列表:

d = 3
e = 2
b = 1.5
a = 1
c = 1

我试图使用关联数组来实现这一点,但我失败了,因为它没有编入索引。你能帮我解决这个问题吗?

2 个答案:

答案 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具有自定义排序功能的数组,该数组仅使用每个值中的第二项。

相关问题