所以我有这个数组,我需要按第二项(newInv[x][1])
按字母顺序排序。我试过制作一个compareFunction
但是没有用。救命!感谢。
newInv = [
[2, "Hair Pin"],
[3, "Half-Eaten Apple"],
[67, "Bowling Ball"],
[7, "Toothpaste"]
];
答案 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)