我是这位董事会的新手已经在这里钓了很长时间了,这是我第一次在这里发帖。我现在有点像堵塞我在javascript中有一个看起来像这样的数组。每个ID都与人名相关联
Array
(
[230] => Smith, Marc-Andre
[11369] => Smith, Wayne
[12561] => Smith, Diane
[12637] => Smirnova, Natalie
)
现在,数组按索引排序,索引是人的ID。我想知道是否可以按字母顺序对其进行排序,使得数组现在看起来像
Array
(
[12637] => Smirnova, Natalia
[12561] => Smith, Diane
[230] => Smith, Marc-Andre
[11369] => Smith, Wayne
)
到目前为止,我尝试使用array.sort()它按字母顺序排序,但ID丢失了它给了我
Array
(
[0] => Smirnova, Natalia
[1] => Smith, Diane
[2] => Smith, Marc-Andre
[3] => Smith, Wayne
)
这是我第一次编写javascript,所以感谢您提前获得所有帮助。
答案 0 :(得分:2)
将条目作为对象存储在具有ID和name属性的数组中。 JSON看起来像:
[
{'id':230,'name':'Smith, Marc-Andre'},
{'id':11369,'name':'Smith, Wayne'},
{'id':12561,'name':'Smith, Diane'},
{'id':12637,'name':'Smirnova, Natalie'}
]
然后将函数传递给Array.sort()以选择要排序的属性。见https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/sort
答案 1 :(得分:1)
您可以执行以下操作:
function arrayify(arg) {
var ret = [];
for (var i in arg) {
if (!arg.hasOwnProperty(i) continue;
ret.push({key: i, value: arg[i]});
}
return ret;
}
arr = arrayify(arr).sort(function(a, b) {
return a.key.toString() - b.key.toString();
});
答案 2 :(得分:1)
你不能用一个简单的数组来做你想要的。根据定义,数组是由数组索引排序的数据列表。您要求通过除数组索引之外的其他内容进行排序。我认为最简单的存储方式最终会像这样:
var myData = [
[12637, "Smirnova, Natalia"],
[12561, "Smith, Diane"],
[230, "Smith, Marc-Andre"],
[11369, "Smith, Wayne"]
];
因此,它将是一个数组数组,其中每个子数组包含两个项目,第一个是id,第二个是名称。这与wmorrell提出的相似,但略有不同。
然后,您可以通过将自定义比较传递到排序例程中,按姓氏对数据进行排序,如下所示:
// custom sort (assumes all data is fully formed)
// sorts in ascending order by the 2nd item in each embedded array
myData.sort(function(a,b) {
if (a[1] < b[1]) return(-1);
if (a[1] > b[1]) return(1);
return(0);
});