1

我在javascript中有以下关联数组...

opt_array["wta"] = 23;
opt_array["cdp"] = 54;
opt_array["cdm"] = 54;
opt_array["ppv"] = 44;

我需要按值(降序)排序,然后按键(按特定顺序)。因此,例如在上面我需要输出 54,54,44,23 并且如果有平局,则按此顺序排列键。wta、cdp、cdm、ppv。

所以返回的数组将是......

opt_array["cdp"] = 54;
opt_array["cdm"] = 54;
opt_array["ppv"] = 44;
opt_array["wta"] = 23;

谢谢

4

4 回答 4

7

您不是将opt_array其用作数组,而是将其用作对象。

对象的属性在 JavaScript 中是无序的,您不能将它们按任何特定顺序排列。

唯一出现的时间顺序似乎是当您将数组用作数组并使用数组“索引”时,它们是数字字符串。(是的,真的。虽然我们倾向于将它们写成数字,但它们实际上是属性名称,而属性名称始终是字符串。)

您可以从opt_array数组中获取所有属性名称,然后对它们进行排序,然后循环以产生输出。例如:

var index;
var names = Object.keys(opt_array);
names.sort();
for (index = 0; index < names.length; ++index) {
    console.log(names[index] + ": " + opt_array[names[index]]);
}

(使用Object.keys,这是一个ES5功能,并非所有浏览器都存在。您可以为早期的浏览器填充它。)

或者,如果您愿意,您可以拥有一个对象数组,并按这些对象的属性对数组进行排序:

opt_array = [
    {key: "wta", value: 23},
    {key: "cdp", value: 54},
    {key: "cdm", value: 54},
    {key: "ppv", value: 44}
];
opt_array.sort(function(a, b) {
    var rv;

    if (a.key < b.key) {
       rv = -1;
    }
    else if (a.key > b.key) {
       rv = 1;
    }
    else {
       rv = 0;
    }
    return rv;
});

但这对于您使用的任何东西都可能没有用opt_array

于 2013-03-12T16:12:56.787 回答
3

JavaScript 中没有关联数组之类的东西。你所拥有的是一个对象。

对象没有顺序。无论您设置键的顺序如何,它都会以它认为合适的方式排列它们。因此,您无法对它们进行排序。

于 2013-03-12T16:13:18.903 回答
0

布赖恩:

Javascript 函数有时不足以处理数组。

我使用了这个 javascript 库PHPJS

使用 javascript 排序:http: //phpjs.org/functions/asort/

祝你好运!!!

于 2013-03-12T16:46:39.570 回答
0

您可以使用 Object.keys 获取排序键的数组

var sortedKeys = Object.keys(opt_array).sort();

for(var i = 0; i < sortedKeys.length; i++){
    console.log("opt_array['" + sortedKeys[i] +"'] = "+ opt_array[sortedKeys[i]]+ ";");
}

输出:

opt_array['cdm'] = 54;
opt_array['cdp'] = 54;
opt_array['ppv'] = 44;
opt_array['wta'] = 23;
于 2013-03-12T16:24:25.367 回答