How can I sort a javascript array of objects numerically and then alphabetically?
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
Sorting objects in an array by a field value in JavaScript
如何按数字(按ID)排序对象数组,然后按字母(按名称)排序?
当前方式提供的输出无效。
这是我要整理的对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | var items = [ { "id": 165, "name":"a" }, { "id": 236, "name":"c" }, { "id": 376, "name":"b" }, { "id": 253, "name":"f" }, { "id": 235, "name":"e" }, { "id": 24, "name":"d" }, { "id": 26, "name":"d" } ] |
我尝试的方式
1 2 3 4 5 | items.sort(function(a, b) { return (a.id - b.id); }).sort(function(a, b) { return (a.name - b.name); }); |
这是J小提琴。
http://jsfiddle.net/jh4xb/
编辑:不好意思,这个问题让我困惑了一段时间。
我要做的是先按最高ID排序,然后按字母顺序排序,最后应该是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | var items = [ { "id": 376, "name":"b" }, { "id": 253, "name":"f" }, { "id": 236, "name":"c" }, { "id": 235, "name":"e" }, { "id": 165, "name":"a" }, { "id": 26, "name":"d" }, { "id": 24, "name":"d" } ] |
我觉得最好是…
1 2 3 | items.sort(function(a, b) { return a.id - b.id || a.name.localeCompare(b.name); }); |
第二类基本上会否定第一类,所以你必须做一次。)
如果您需要颠倒顺序,交换仓位(
1 2 3 | items.sort(function(a, b) { return - ( a.id - b.id || a.name.localeCompare(b.name) ); }); |
这里是JSfiddle(需要简化数据以显示我的观点)。
如果您的意思是希望它们按
1 2 3 4 5 6 7 8 9 | items.sort(function(a, b) { if (a.id !== b.id) { return a.id - b.id } if (a.name === b.name) { return 0; } return a.name > b.name ? 1 : -1; }); |
否则你的问题就不清楚了。
创建一个常规函数,以便根据需要对其进行排序。检查下面的dynamicsort函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | var items = [ { "id": 165, "name":"a"}, { "id": 236, "name":"b"}, { "id": 376, "name":"c"}, { "id": 253, "name":"d"}, { "id": 235, "name":"e"}, { "id": 24, "name":"f"} ]; function dynamicSort(property) { return function(a, b) { return (a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0; } } items.sort(dynamicSort('name')).sort(dynamicSort('id')); console.log(items); items.sort(dynamicSort('id')).sort(dynamicSort('name')); console.log(items); |
你的问题是你如何整理信件。
没有按你的想法去做。它不是按照词汇顺序来评价它们。用它代替
我看不到Chrome中有任何错误,但排序不正确。
如果我将您的分类代码更改为:
1 2 3 4 5 6 7 8 | var firstRun = items.sort(function(a, b) { return (a.id - b.id); }); var secondRun = firstRun.sort(function(a, b) { return (a.name - b.name); }); console.log(secondRun);? |
我相信分类是正确的。您的示例并不需要进行第二次排序,因为每个数字(ID)都是不同的。但是当我把B,D和E都做了235号的身份证时,一切都很好。