【问题标题】:Javascript - Ignore Quotes when sorting arrayJavascript - 排序数组时忽略引号
【发布时间】: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',  ...]

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

【问题讨论】:

标签: javascript arrays sorting quotes


【解决方案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);
                       
  

【讨论】:

    猜你喜欢
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    相关资源
    最近更新 更多