使用其中一个索引对数组排序

时间:2018-06-16 18:32:46

标签: javascript algorithm

我有一个包含不同值的数组,我想根据其中一个索引中的数值对其进行排序

const arr = [
  ['foo', var, 5],
  ['fee', var, 7],
  ['faa', var, 3]
]

我想使用arr[2]值将此数组从大到小排序。知道如何做到这一点吗?

欲望的结果应该是:

const arr = [
  ['fee', var, 7],
  ['foo', var, 5],
  ['faa', var, 3]      
]

2 个答案:

答案 0 :(得分:2)

您可以像这样使用sort

arr.sort((a,b) => {
  return a[2] < b[2] // To sort in descending order
  // return a[2] > b[2] // To sort in ascending order
})

示例:

&#13;
&#13;
var arr = [
  ['foo', 'fifth', 5],
  ['fee', 'seventh', 7],
  ['faa', 'third', 3]
];

var sortedArr = arr.sort(function(a,b){
  return a[2] < b[2]
});

console.log(sortedArr)
&#13;
&#13;
&#13;

以下是排序功能的工作原理

首先,让我们假设这个数组:

[1,2] // where a = 1, b = 2

升序:

是否大于b?

  

如果是,我们需要sort =&gt;返回true

     

否则,我们不需要排序=&gt;返回错误

降序:

是否小于b?

  

如果是,我们需要sort =&gt;返回true

     

否则,我们不需要排序=&gt;返回错误

在前面的示例中,我们将验证a是否小于b,然后返回true以将其排序,否则返回false,因为这已经是降序。

根据@ Nina Scholz

  

请不要返回布尔值进行排序,因为sort需要一个小于零,零或大于零的值。省略相同的情况可能实际上有效,但这使得算法更难以使数组排序

您应该考虑返回0,1或-1。对于您的情况,您应该这样使用:

arr.sort((a,b) => {
  if(a[2] < b[2]) return 1
  if(a[2] > b[2]) return -1
  if(a[2] === b[2]) return 0
})

<强>此外

如果值只是整数(不包含无穷大和NaN),则可以简化如下,

arr.sort((a,b) => b[2]-a[2])

答案 1 :(得分:0)

Feed Exporters

console.log out put是9 7 5 4 3 2 修改代码以循环遍历Array

中的object.var