.sort()比较第二项的二维数组javascript

时间:2017-03-22 11:07:01

标签: javascript arrays sorting

所以我有这个数组,我需要按第二项(newInv[x][1])按字母顺序排序。我试过制作一个compareFunction但是没有用。救命!感谢。

newInv = [
    [2, "Hair Pin"],
    [3, "Half-Eaten Apple"],
    [67, "Bowling Ball"],
    [7, "Toothpaste"]
];

3 个答案:

答案 0 :(得分:1)

您可以将sort()方法与localeCompare()结合使用来返回已排序的数组。



var newInv = [
  [2, "Hair Pin"],
  [3, "Half-Eaten Apple"],
  [67, "Bowling Ball"],
  [7, "Toothpaste"]
];

var result = newInv.sort(function(a, b) {
  return a[1].localeCompare(b[1])
})

console.log(result)




答案 1 :(得分:0)

很难确定你做错了什么,并解释了为什么,当你没有包含你的非工作代码时。

但是,我认为你的问题在于实现比较功能。 compare函数需要带两个参数,数组中的两个项被排序,并返回:

  • 1(或任何正整数),如果第一项是之后排序顺序中的第二项
  • 0如果他们是“相同的”
  • -1(或任何负整数),如果第一项是之前排序顺序中的第二项。

这是一个做你想做的比较功能:

newInv = [
[2, "Hair Pin"],
[3, "Half-Eaten Apple"],
[67, "Bowling Ball"],
[7, "Toothpaste"]
];

compareFn = function(a, b) {
  if (a[1] == b[1]) return 0;
  return a[1] > b[1] ? 1 : -1;
};

newInv.sort(compareFn);

alert(newInv);

答案 2 :(得分:-1)

试试这个;

newInv = [
    [2, "Hair Pin"],
    [3, "Half-Eaten Apple"],
    [67, "Bowling Ball"],
    [7, "Toothpaste"]
];

//classical nested loop for sorting

for(i=0;i<newInv.length;i++)
{
  for(j=i+1;j<newInv.length;j++)
  { 
    //alphabetical comparing of second elements

    if(newInv[i][1].localeCompare(newInv[j][1])>0)
    {
        //swapping values
        var x=newInv[i];
        newInv[i]=newInv[j];
        newInv[j]=x;
    }
  }
}

//display sorted array
console.log(newInv)