【发布时间】:2015-10-23 19:22:55
【问题描述】:
我有一个类似的对象数组:
var this array = [
{
"id" : "A20",
"age" : "16"
},
{
"id" : "A2",
"age" : "12"
},
{
"id" : "B16",
"age" : "45"
}]
我需要按他们的 ID 对这个数组进行排序,所以它最终会像:
this array = [
{
"id" : "A2",
"age" : "12"
},
{
"id" : "A20",
"age" : "16"
},
{
"id" : "B16",
"age" : "45"
}]
我有这种排序方法:
nodes.sort(function(a,b){
// console.log(a.Pos)
// console.log(a.pinNum)
var alc = a.id, blc = b.id;
console.log(alc)
return alc > blc ? 1 : alc < blc ? -1 : 0;
});
但这只能按字母顺序工作。我也发现了这个,但它只返回我传递给函数的字符串,而不是对象数组:
function sortArray(arr) {
var tempArr = [],
n;
console.log(arr)
for (var i in arr) {
var thisString = arr[i].id;
// tempArr[i] = arr[i].match(/([^0-9]+)|([0-9]+)/g);
tempArr[i] = thisString.match(/([^0-9]+)|([0-9]+)/g);
for (var j in tempArr[i]) {
if (!isNaN(n = parseInt(tempArr[i][j]))) {
tempArr[i][j] = n;
}
}
}
tempArr.sort(function (x, y) {
for (var i in x) {
if (y.length < i || x[i] < y[i]) {
return -1; // x is longer
}
if (x[i] > y[i]) {
return 1;
}
}
return 0;
});
for (var i in tempArr) {
arr[i] = tempArr[i].join('');
}
return arr;
}
console.log(sortArray(nodes).join(","));
我需要的是第二个排序功能,但能够按字母和数字排序。谢谢
【问题讨论】:
-
var alc = +a.id, blc = +b.id; -
@dandavis 你能解释一下你的观点吗?
-
@dandavis 但我的字符串由字母和数字组成? “A20” ...
-
oooooops,我应该仔细阅读它,抱歉。
-
告诉我们更多关于比较规则的信息,它只是简单地删除任何前缀非数字吗?还是有其他规定?
标签: javascript jquery arrays sorting