回调排序功能按元组数对数组进行排序

时间:2018-02-24 02:23:19

标签: javascript node.js data-structures callback

我正在尝试使用sort()回调函数对其数组进行排序。

到目前为止,我的功能是获取元音的数量但不知道如何在sort()中实现它作为回调。

var array = [
    "abc",
    "december",
    "ax",
    "cv",
    "veeeeee",
    "colo",
    "bobola",
    "lax",
    "cri",
    "nahamua",
    "pip"
];

这是我在一个单词中获取元音数量的函数。

function isVowel(x) {
  var result;
  result = x.toLowerCase() == "a" || x == "e" || x == "i" || x == "o" || x == "u";
  return result;
}

function countVowels(strChar) {
  var token = strChar.split('') // array of words
  var countVowel = token.filter(isVowel)
  return 'number of vowels: ' + countVowel.length
}

1 个答案:

答案 0 :(得分:1)

这种方法按元音数排序,因此没有元音的单词将被放置在第一个位置。

  • 了解函数isVowel如何使用正则表达式/[aeiou]/i
  • 基本上,函数calback(a, b)的回调sort会减去每个单词的元音数量,以使0等于> 0 a 更高,< 0 b 更大。

var array = [
    "abc",
    "december",
    "ax",
    "cv",
    "veeeeee",
    "colo",
    "bobola",
    "lax",
    "cri",
    "nahamua",
    "pip",
    "zsw",
    "bcfw"
];

function isVowel(x) {
  //var result;
  //result = x.toLowerCase() == "a" || x == "e" || x == "i" || x == "o" || x == "u";
  //return result;

  return (/[aeiou]/i).test(x); 
}

function countVowels(strChar, strchar2) {
  var count1 = strChar.split('').filter(isVowel).length;
  var count2 = strchar2.split('').filter(isVowel).length;
  
  if (count1 === count2) return strChar.localeCompare(strchar2);
  
  return count1 - count2
}

array.sort(countVowels);

console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }