对包含数字和字符串的2d数组进行排序

时间:2016-05-10 08:18:15

标签: javascript arrays multidimensional-array

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

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;
}

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

1 个答案:

答案 0 :(得分: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>');