【问题标题】:Sorting 2d Arrays containing Numbers and Strings对包含数字和字符串的二维数组进行排序
【发布时间】:2016-05-10 08:18:15
【问题描述】:

我有一个如下所示的库存。

var arr1 = [
    [21, "Bowling Ball"],
    [2, "Dirty Sock"],
    [1, "Hair Pin"],
    [5, "Microphone"]
];

我想按字母顺序对库存进行排序。我尝试使用简单的冒泡排序技术来做到这一点。但它显示一个错误-“wrappedCompareFn 不是函数”。

function sort(arr1){    
//console.log("works");
for(var i=0;i<arr1.length;i++){      
  for(var j=0;j<arr1.length;j++){     
   // console.log(arr1[j][1].localeCompare(arr1[i][1]));
    if(arr1[j][1].localeCompare(arr1[i][1])<0){          
      var tmp=arr1[i][1];
      arr1[i][1]=arr1[j][1];
      arr1[j][1]=tmp;          
       }          
    }      
  }        
return arr1;
}

我的代码有问题吗?还有没有更好的方法来对具有不同类型对象的多维数组进行排序??

【问题讨论】:

  • 这不是冒泡排序。内循环的初始值应该是:for (var j=i+1; ...
  • 可能的替代方案:stackoverflow.com/questions/4907683/…
  • 你不清楚,要按第一列还是第二列排序..

标签: javascript arrays multidimensional-array


【解决方案1】:

您可以使用带有自定义回调的内置方法Array#sort

sort() 方法对数组的元素进行就地排序并返回该数组。排序不一定是stable。默认排序顺序是根据字符串 Unicode 码位。

var arr1 = [[1, "Hair Pin"], [21, "Bowling Ball"], [2, "Dirty Sock"], [5, "Microphone"]];

arr1.sort(function (a, b) {
    return a[1].localeCompare(b[1]);
});

document.write('<pre>' + JSON.stringify(arr1, 0, 4) + '</pre>');

【讨论】:

  • 只是一些疑问...这里的 a 和 b 是什么。数组的两个元素是按顺序排列的吗??
  • a 和 b 是外部数组的元素,例如,它将[21, "Bowling Ball"][2, "Dirty Sock"] 进行比较。对于结果,您需要使用索引访问内部数组的第二个元素。
猜你喜欢
  • 2019-05-26
  • 2020-02-18
  • 1970-01-01
  • 2011-03-07
  • 2012-12-17
  • 1970-01-01
  • 1970-01-01
  • 2016-10-28
相关资源
最近更新 更多