2014-12-11 4 views
-1

Проблема заключается в том,Как сравнить строку с каждой строкой в ​​списке в js?

Given a word and a list of possible anagrams, selects the correct sublist. 

Given "listen" and a list of candidates like "enlists" "google" 
"inlets" "banana"` the program should return a list containing 
"inlets". 

Тестовые данные имеют тип:

var anagram = require('./anagram'); 

describe('Anagram', function() { 

    xit("detects simple anagram",function() { 
    var subject = anagram("ant"); 
    var matches = subject.matches(['tan', 'stand', 'at']); 

    expect(matches).toEqual(['tan']); 
    }); 
}); 

Вот что я думал,

  1. Возьмите в данном слове, разделить каждый характер и сортировать его по алфавиту
  2. Возьмите в список, разделите его на слова, возьмите каждое слово и разделите каждый символ и соберите его alp habetically
  3. Сравните результат 1 с 2, если строка соответствует, верните исходную форму.

Но проблема в том, что я не знаю, с чего начать, пожалуйста, помогите.

+0

Что является результатом «anagram (« ant »);'? – thefourtheye

ответ

0

Да, ваше мышление правильно, вот как вы можете реализовать его:

var anagrams = function(input, wordlist){ 
    // sort the input word 
    var sortedinput = input.split('').sort().join(''); 
    // filter the array by checking if... 
    return wordlist.filter(function(word){ 
     // ...the word after sorting matches the sorted input 
     return word.split('').sort().join('') == sortedinput; 
    }); 
} 

anagrams('listen', ["enlists", "google", "inlets", "banana"]); 
// ["inlets"] 

http://jsfiddle.net/2kkvw4u5/

+0

Хорошо, у меня появилась идея. Но почему-то это не проходит испытание. Я получаю TypeError: Не могу вызвать метод «фильтр» неопределенного. – user1502

+0

Он не пройдет тест, опубликованный в вашем вопросе, потому что тест ожидает, что 'anagram()' возвращает объект, который предоставляет метод 'matches', который принимает массив в качестве аргумента. – pawel

+0

@ user1502 что-то вроде этого http://jsfiddle.net/2kkvw4u5/1/ – pawel

0

После разделения текущего слова в массив символов:

  1. итерацию по списку слов;

  2. проверить длину массива, если он равен сравниваемому слову char array;

  3. сортировать сравниваемый массив символов слова и текущий массив символов слова и проверять каждый элемент, если они равны для всех индексов в этом массиве.

+0

Хорошая оптимизация с проверкой длины перед разбиением и сортировкой! – pawel

Смежные вопросы