用string排列数组
我想sorting一个数组string中的数组。 这是类似于这个问题( sorting数组中的string数组 ),但我不知道如何实现。 我的数组如下
var myArray = [ ['blala', 'alfred', '...'], ['jfkdj', 'berta', '...'], ['vkvkv', 'zimmermann', '...'], ['cdefe', 'albert', '...'], ];
我想按字母顺序(不区分大小写)按内部数组的名称或第二个参数进行sorting。 之后,我想sorting的第一个参数,如果有两个相同的第二个参数的元素。 我尝试使用以下,但不成功,并没有真正得到原因。 任何人都可以build议:
function Comparator(a,b){ if (a[1] < b[1]) return -1; if (a[1] > b[1]) return 1; return 0; } var myArray = [ ['blala', 'alfred', '...'], ['jfkdj', 'berta', '...'], ['vkvkv', 'zimmermann', '...'], ['cdefe', 'albert', '...'], ]; myArray = myArray.sort(Comparator);
在第二个参数后面sorting第一个参数,我会这样做吗?
function Comparator(a,b){ if (a[1] < b[1]){ if (a[2] < b[2]) return -1 if (a[2] > b[2]) return 1; } return -1; } if (a[1] > b[1]) return 1;{ if (a[2] < b[2]) return -1 if (a[2] > b[2]) return 1; } return 1; } return 0; } var myArray = [ ['blala', 'alfred', '...'], ['jfkdj', 'berta', '...'], ['vkvkv', 'zimmermann', '...'], ['cdefe', 'albert', '...'], ]; myArray = myArray.sort(Comparator);
你可以编码:
function Comparator(a, b) { // you can use the `String.prototype.toLowerCase()` method // if the comparison should be case insensitive if (a[1] < b[1]) return -1; if (a[1] > b[1]) return 1; if (a[0] < b[0]) return -1; if (a[0] > b[0]) return 1; return 0; }
上面的函数首先根据数组的第二个元素对元素进行sorting。 如果第二个元素相等,则根据第一个元素对它们进行sorting,如果a[1] === b[1]
和a[0] === b[0]
则返回0
,离开a
和b
位置不变。
从MDN Array.prototype.sort
文档 :
如果提供了
compareFunction
,则数组元素将根据compare函数的返回值进行sorting。 如果a
和b
是被比较的两个元素,那么:
- 如果
compareFunction(a, b)
小于0
,则将compareFunction(a, b)
sortinga
比b
更低的索引,即首先出现。- 如果
compareFunction(a, b)
返回0
,则相对于彼此保持a
和b
不变,但相对于所有不同的元素进行sorting。 注意:ECMAscript标准并不能保证这种行为,因此并非所有浏览器(例如,至less可以追溯到2003年的Mozilla版本)都尊重这一点。- 如果
compareFunction(a, b)
大于0
,则将compareFunction(a, b)
sorting为比a
更低的索引。 当给定一对特定的元素a
和b
作为其两个参数时compareFunction(a, b)
必须始终返回相同的值。 如果返回不一致的结果,那么sorting顺序是不确定的。