按大多数特定字母排序数组

时间:2018-06-12 01:11:55

标签: javascript arrays sorting

我有array个单词和以下字母列表:

  

searoiltnudcypmhgbkfwvzxjq

我想按照此列表中的字母顺序对array进行排序,以便首先显示列表开头附近字母数量最多的单词。例如:以下内容:

var wordList = "nymph, races, tundra"; 

一旦排序,应该是:

wordList = "races, tundra, nymph"; 

到目前为止,我有以下内容为列表中的每个字母指定权重:

  for (let h = 0; h < freqWords.length; h++) {
     this["freq" + h] = h; 
  }

接下来,我必须根据数组中包含的这些变量的数量为数组中的每个单词赋值,然后从最低值到最高值进行排序。不幸的是,我不知道实现这一目的的语法。

2 个答案:

答案 0 :(得分:2)

较短的声明性功能风格替代方案:

const letters = 'searoiltnudcypmhgbkfwvzxjq';
const input = "nymph, races, tundra"
const sorted = input.split(',').map(str => str.trim()).sort((aWord, bWord) => {

    const aCount = aWord.split('').filter(char => letters.includes(char)).length;
    const bCount = bWord.split('').filter(char => letters.includes(char)).length;

    return bCount - aCount;

});

答案 1 :(得分:1)

首先,如果将字母列表转换为数组,并将单词列表转换为数组,则会更容易。然后,您将需要为Array.prototype.sort编写比较器函数,该函数计算所提供的字在所提供的字母数组中的字母数。这是一个解决您问题的实现:

const letters = [
  's', 'e', 'a', 'r', 'o', 'i', 'l', 't', 'n', 
  'u', 'd', 'c', 'y', 'p', 'm', 'h', 'g', 'b', 
  'k', 'f', 'w', 'v', 'z', 'x', 'j', 'q'
];

const wordList = [
  'nymph', 
  'races', 
  'tundra'  
];

console.log(wordList);

const sortedList = wordList.sort((a, b) => {
  const aOccurences = letterOccurences(letters, a);
  const bOccurences = letterOccurences(letters, b);
  return aOccurences - bOccurences;
});

console.log(sortedList);

function letterOccurences(letters, word) {
  let occurences = 0;
  for (let i = 0; i < word.length; i++) {
    if (letters.includes(word.substring(i, i+1))) {
        occurences++;
    }
  }
  return occurences;
}

输入列表:nymph, races, tundra

结果:tundra, nymph, races(分别为6,5和5次)。

编辑:如果您需要我解释任何内容或有任何语法不熟悉,请与我们联系。