11

可能重复:
如何在 Javascript 中按关联数组的值对关联数组进行排序?

所以首先我知道从技术上讲 Javascript 没有关联数组,但我不确定如何命名它并获得正确的想法。

所以这是我的代码,

var status = new Array();
status['BOB'] = 10
status['TOM'] = 3
status['ROB'] = 22
status['JON'] = 7

而且我想按值对它进行排序,这样当我稍后循环遍历它时,ROB首先出现,然后BOB等等。

我试过了,

status.sort()
status.sort(function(a, b){return a[1] - b[1];});

但他们似乎都没有真正做任何事情。

在前后将阵列打印到控制台会导致它以相同的顺序出现。

4

4 回答 4

25

数组只能有数字索引。您需要将其重写为对象或对象数组。

var status = new Object();
status['BOB'] = 10
status['TOM'] = 3
status['ROB'] = 22
status['JON'] = 7

或者

var status = new Array();
status.push({name: 'BOB', val: 10});
status.push({name: 'TOM', val: 3});
status.push({name: 'ROB', val: 22});
status.push({name: 'JON', val: 7});

如果您喜欢该status.push方法,可以使用以下方法对其进行排序:

status.sort(function(a,b) {
    return a.val - b.val;
});
于 2012-10-08T19:23:42.817 回答
3

javascript中的“数组”是数字索引的。“对象”就是您所说的关联数组。“对象”本质上是无序的。

所以要做到这一点,你需要稍微改变你的数据结构。

var arr = []; // Array

// push a few objects to the array.
arr.push({name: 'BOB', age: 10});
arr.push({name: 'TOM', age: 3});
arr.push({name: 'ROB', age: 22});
arr.push({name: 'JON', age: 7});

var sorted = arr.sort(function(a, b) {
  return a.age - b.age;
});

console.log(sorted);

在此处输入图像描述

于 2012-10-08T19:29:14.290 回答
2

首先 - 创建一个数组以将其用作映射是不正确的。而是使用对象:

var status = {};
status['BOB'] = 10;

Array 是一个具有处理数字顺序索引的逻辑的类。

现在回答您的回复,映射没有顺序,不能保证它会迭代的顺序,所以没有“排序映射”之类的东西

我建议您使用带有键、值的对象的数组:

var status = [];
status.push({ key: 'BOB', value: 10 });

或两个数组:

var status = {
    keys: [],
    values: []
};
status.keys.push('BOB');
status.value.push(10);

这取决于您的需求。

于 2012-10-08T19:26:31.677 回答
1

您应该在 Array 中使用 JavaScript 对象:jsfile

       var status = new Array();
    status.push({key: 'BOB', value: 10});
    status.push({key: 'TOM', value: 3});
    status.push({key: 'ROB', value: 22});
    status.push({key: 'JON', value: 7});
   status.sort(function(a, b){

       if(a.value > b.value){
        return -1;
       }
        else if(a.value < b.value){
        return 1;
       } 
       return 0;
    });
于 2012-10-08T19:27:07.357 回答