对其中包含字符串的数组进行排序
Posted
技术标签:
【中文标题】对其中包含字符串的数组进行排序【英文标题】:Sorting Array of Arrays with Strings in it 【发布时间】:2015-07-07 22:17:39 【问题描述】:我正在尝试对包含字符串数组的数组进行排序。它类似于这个问题(Sort an array with arrays in it by string),但我不确定如何实现。我的数组如下
var myArray = [
['blala', 'alfred', '...'],
['jfkdj', 'berta', '...'],
['vkvkv', 'zimmermann', '...'],
['cdefe', 'albert', '...'],
];
我正在尝试按名称或内部数组的第二个参数按字母顺序(不区分大小写)对其进行排序。之后,如果有两个元素具有相同的第二个参数,我想按第一个参数排序。我尝试使用以下但不成功,并没有真正明白为什么。任何人都可以建议:
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);
要在第二个参数之后对第一个参数进行排序,我会这样做吗?
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);
【问题讨论】:
你有一个额外的)
-- 试试if(a[1] < b[1]) return -1;
if (a[1] < b[1]) return -1; !== if(a[1]) < b[1]) return -1;
!
@Vohuman 相当肯定他希望有人解释代码,而不是为什么他的拼写错误。
检查@gordon ***.com/a/17998413/1841852提供的解决方案@一个JSFiddle示例和他的解决方案jsfiddle.net/f14bpuyk
您的第二个示例似乎是从 1 而不是 0 开始索引。
【参考方案1】:
你可以编码:
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;
上述函数首先根据数组的第二个元素对元素进行排序。如果第二个元素相等,则根据第一个元素对它们进行排序,如果 a[1] === b[1]
和 a[0] === b[0]
返回 0
,则 a
和 b
位置不变。
From MDN Array.prototype.sort
documentation:
如果提供
如果compareFunction
,则数组元素根据比较函数的返回值进行排序。如果a
和b
是被比较的两个元素,那么:compareFunction(a, b)
小于0
,则将a
排序到比b
更低的索引,即a
排在第一位。 如果compareFunction(a, b)
返回0
,则保持a
和b
彼此保持不变,但对所有不同元素进行排序。注意:ECMAscript 标准不保证这种行为,因此并非所有浏览器(例如至少可以追溯到 2003 年的 Mozilla 版本)都尊重这一点。 如果compareFunction(a, b)
大于0
,则将b
排序到比a
更低的索引。 当给定一对特定元素a
和b
作为其两个参数时,compareFunction(a, b)
必须始终返回相同的值。如果返回不一致的结果,则排序顺序未定义。
【讨论】:
现在 - 我正在插入它并且它可以工作,但我仍然不知道它是如何工作的 您好,您可以在此处找到有关排序功能如何工作的更多说明w3schools.com/jsref/jsref_sort.asp。 它的工作原理是首先比较名称 - 即 a[1] 和 b[2] - 如果一个大于另一个,则按字母顺序返回 1 或 -1 取决于哪个更伟大。如果两者都不更大,则意味着它们相等,因此它会继续并尝试以相同的方式比较 a[0] 和 b[0]。 你的意思是第一行的a[1]和b[1]?以上是关于对其中包含字符串的数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章