可能重复:
How to sort an associative array by its values in 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];});
但他们似乎都没有做任何事情。
将阵列打印到控制台之前和之后以相同的顺序出现。
答案 0 :(得分:23)
数组只能有数字索引。您需要将其重写为Object或Object of Array。
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;
});
答案 1 :(得分:2)
首先 - 创建一个数组以将其用作映射是不正确的。而是使用Object:
var status = {};
status['BOB'] = 10;
Array是一个具有处理数字序列索引的逻辑的类。
现在回答您的回复,Mappings没有订单,无法保证它将迭代的顺序,因此没有“排序映射”这样的事情
我很高兴你使用一个带有键值的对象数组:
var status = [];
status.push({ key: 'BOB', value: 10 });
或两个阵列:
var status = {
keys: [],
values: []
};
status.keys.push('BOB');
status.value.push(10);
这取决于您的需求。
答案 2 :(得分:2)
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);
答案 3 :(得分:1)
您应该在Array中使用JavaScript Object:jsfidle
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;
});