【发布时间】:2019-03-10 15:45:08
【问题描述】:
我有一个类似的对象数组
array[0] = {id: 1, name: "First"}
array[1] = {id: 2, name: "Second"}
我尝试使用以下方法按name 字段排序:
Array.prototype.alphanumSort = function (caseInsensitive) {
for (var z = 0, t; t = ((typeof this[z] == "string" || typeof this[z] == "undefined") ? this[z] : this[z].name); z++) {
this[z] = new Array();
var x = 0, y = -1, n = 0, i, j;
while (i = (j = t.charAt(x++)).charCodeAt(0)) {
var m = (i == 46 || (i >= 48 && i <= 57));
if (m !== n) {
this[z][++y] = "";
n = m;
}
this[z][y] += j;
}
}
this.sort(function (a, b) {
for (var x = 0, aa, bb; (aa = a[x]) && (bb = b[x]); x++) {
if (caseInsensitive) {
aa = aa.toLowerCase();
bb = bb.toLowerCase();
}
if (aa !== bb) {
var c = Number(aa), d = Number(bb);
if (c == aa && d == bb) {
return c - d;
} else return (aa > bb) ? 1 : -1;
}
}
return a.length - b.length;
});
for (var z = 0; z < this.length; z++)
this[z] = this[z].join("");
}
但我从中返回的列表包含一个数组,其中只有 name 字段,没有相应的 id。为什么会这样?
有没有办法应用这个算法来过滤对象?
我是 JavaScript 新手,所以请温柔一点。
【问题讨论】:
-
您看过
String#localeCompare和选项吗? -
请不要把方法放在原型链上
-
没关系 @AyushGupta - OP 从来没有真正使用过该代码
-
@NinaScholz 如果我遇到“Ex 10”和“Ex 2”之类的情况怎么办?第二个应该是第一个
标签: javascript arrays sorting object