Javascript - 排序数组时忽略引号

Posted

技术标签:

【中文标题】Javascript - 排序数组时忽略引号【英文标题】:Javascript - Ignore Quotes when sorting array 【发布时间】:2015-07-31 13:40:19 【问题描述】:

我还没有找到一个好的解决方案。我有一个词汇表弹出中使用的字符串数组。字符串是键,用于从对象中检索定义。我需要按字母顺序对数组进行排序,但某些字符串包含引号并最终在排序时首先出现。

    keys = ['Back Pay', '"Hot Cargo" Agreements', 'Clayton Act', 
    'Fiduciaries', 'Estoppel', ...]  

排序后,我希望列表忽略引号并如下:

    ['Back Pay', 'Clayton Act', 'Estoppel',
    'Fiduciaries', '"Hot Cargo" Agreements', ...]

但我得到以下信息:

    ['"Hot Cargo" Agreements', 'Back Pay', 'Clayton Act', 'Estoppel',
    'Fiduciaries',  ...]

有没有办法在排序过程中忽略引号而不剥离它们?它们是术语的一部分,在弹出词汇表中显示它们时需要存在。

【问题讨论】:

你可以写自己的sort function并按你的意愿排序 【参考方案1】:

您可以使用

创建自定义排序功能
myArray.sort(mysortfunction);

然后在你的函数中去掉引号

function mysortfunction(a,b) 
  a = a.replace(/"/g,'');
  b = b.replace(/"/g,'');

  return (a < b ? -1 : 1);

这是jsfiddle。

【讨论】:

如果没记错的话,compareFunction应该返回0大于0或者小于0 i> 而不是 bool 值 更简单:return a &gt; b;【参考方案2】:

您可以编写一个忽略引号的自定义排序函数:

var keys = ['Back Pay', '"Hot Cargo" Agreements', 'Clayton Act', 'Fiduciaries', 'Estoppel'];

function removeQuotes(str) 
  return str.replace(/['"]+/g, '')


var sorted = keys.sort(function(a, b) 
  return removeQuotes(a) > removeQuotes(b);
);

console.log(sorted);
                       
  

【讨论】:

以上是关于Javascript - 排序数组时忽略引号的主要内容,如果未能解决你的问题,请参考以下文章

使用逗号拆分字符串,但忽略双引号内的逗号 - javascript

javascript

使用 PHP 打印功能时 JQuery / JavaScript 中的引号

js 数组 数据去重排序

排序算法 基于Javascript

排序算法 基于Javascript