Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何按值对(关联)数组排序?_Javascript - Fatal编程技术网

Javascript 如何按值对(关联)数组排序?

Javascript 如何按值对(关联)数组排序?,javascript,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){r

可能重复:

首先,我知道从技术上讲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];});
但他们似乎都没有做任何事情


在前后将数组打印到控制台会导致它以相同的顺序显示。

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

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

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

status.sort(function(a,b) {
    return a.val - b.val;
});

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

var status = {};
status['BOB'] = 10;
数组是一个具有处理数字顺序索引逻辑的类

现在回答您的回答,映射没有顺序,无法保证它将迭代的顺序,因此不存在“对映射排序”这样的事情

我建议您将数组与键为、值为的对象一起使用:

var status = [];
status.push({ key: 'BOB', value: 10 });
或两个阵列:

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

这取决于您的需要。

您应该在数组中使用JavaScript对象:

var status=new Array();
push({key:'BOB',值:10});
push({key:'TOM',值:3});
push({key:'ROB',值:22});
push({key:'JON',value:7});
状态.排序(功能(a,b){
如果(a值>b值){
返回-1;
}
否则如果(a值
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);

这是JS数组的错误用法。仅对数组使用数字键
.sort
不起任何作用,因为严格来说,数组没有任何元素。在这种情况下,您必须使用对象。我建议阅读。另外:。尽管标记为副本,但副本中未提及下面提供的解决方案。与下面所有答案中的建议基本相同。它只使用数组而不是对象数组。这是一个细微的差别,不会改变解决方案的大局。同样,它只是提供了一种通过编程将对象转换为数组的方法。。。这比仅硬编码的示例更有用。这里的所有信息也在其他问题中提供。请看一下我的答案。我喜欢这种(数组)方法,什么是按
val
调用和排序的正确方法?我已经更新了我的答案,包括使用对象数组按
val
排序。非常简单的解决方案。对于“对象方法”也是同样的排序方式?@PieroAlberto否,在对象中不能依赖键顺序。对象或多或少是一组无序的键值对。很好地涵盖了这一点。这有利于字符串比较如何按名称排序?
       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;
    });
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);