额外的人物......?

时间:2017-01-10 22:36:32

标签: javascript arrays node.js

所以,基本上。我正在尝试做的是创建一个单词unscrambler,在那里你放入一个混乱的单词并解读它。它工作正常,虽然我单独检查每个角色,由于某种原因,额外的角色会漏掉。

我输入"olehl (hello)",它会返回"dhole, haole, helio, hello, helos, helot, holed, holes, holey, hosel, hotel, hovel, hoyle, mohel, sheol, thole, whole"。我不知道"mohel""dhole"之类的内容是如何进入的。

我的代码:

function unscramble(word) {
    var words = require("an-array-of-english-words");

    var matched = [];

    words.forEach((x) => {
        if(word.length != x.length) {

        } else {
            if(matched.length == 42) return;

            var newword = word.split('');

            var added = 0;

            var i = 0;

            for(i = 0; i <= newword.length-1; i++) {
                if(x.indexOf(newword[i]) >= 0) added++; 

                if(i == word.length-1 && added == word.length && added == x.length) matched.push(x);
            }

        }
    });

    return matched;
}

2 个答案:

答案 0 :(得分:1)

即使x包含x.indexOf(newword[i])没有的字符,

newword仍然可以为真。因此,hello仍然可以与dhole匹配,因为它们的长度相同,l匹配两次。如果您只希望它匹配hello而不是heloo(不同数量的相同字母),您还需要跟踪消费的字母。

您可以通过多种方式执行此操作,但实际上会删除x中找到的字母。

const idx = x.indexOf(newword[i]);
if (-1 !== idx) {
  added++;
  // remove this character
  // You will have to keep track of the original length of `x` as well
  x = x.substring(0, idx) + x.substring(idx + 1, x.length); 
}

您还可以对xnewword进行排序,并比较生成的字符串/数组。

答案 1 :(得分:0)

我同意Explosion Pills。如下所示(不是js,只是大纲)?

function unscramble(word)
  var dictionary = some_array_of_words
  var matches = []
  var sortedWord = word.split('').sort().join('') // sort the word

  dictionary.forEach(dictionaryWord) {
    if (sortedWord.length == dictionaryWord.length) {
      sortedDictionaryWord = dictionaryWord.split('').sort().join('')
      if sortedWord == sortedDictionaryWord {
        matches.push (dictionaryWord)
      }
    }
  }
  return matches
}