2013-08-23 3 views
0

Почему этот код не правильно толкает слова в массив ответов? Когда я изменяю цикл до:Почему массивы нельзя сравнивать с === в Javascript?

for (var k in testDict) { 
     console.log(testDict[k].split("").sort()); 
    } 

это правильно печатает то, что я ожидал, массив раскола, отсортированные символы из слов. Поэтому я не уверен, почему он не оценивает равных и не пытается ответить. Благодаря!

function word_unscrambler(word, dict) { 
    var testDict = dict; 
    var answer = []; 
    var word_scrambled = word.split("").sort(); 
     for (var k in testDict) { 
      if (word_scrambled === testDict[k].split("").sort()) 
       answer.push(testDict[k]); 
     } 
    console.log(answer); 
} 

word_unscrambler("kevin", ["trees", "but", "ankle", "nevik", "knive", "evin"]); 

ответ

3

Проблема заключается в том, что вы тестируете массивы для равенства, так как вы работы со строками, вы можете просто присоединиться оба массива сравниваемых:

function word_unscrambler(word, dict) { 
    var testDict = dict; 
    var answer = []; 
    var word_scrambled = word.split("").sort().join(''); 
     for (var k in testDict) { 
      if (word_scrambled === testDict[k].split("").sort().join('')) 
       answer.push(testDict[k]); 
     } 
    console.log(answer); 
} 
+1

+1. Возможно также memoize 'word_scrambled.join ('')' –

+0

Удивительный, высоко оцененный –

+0

@Jacob Krall Это правда, edit'd – raser

0

вы не можете сравнивать массивы для равенства непосредственно, так как это будет только сравнивать их указатели. Вместо этого вы должны сравнить содержимое массивов. До тех пор, пока вы не имеете дело с многомерными массивами, этого должно быть достаточно:

function word_unscrambler(word, dict) { 
    var testDict = dict; 
    var answer = []; 
    var word_scrambled = word.split("").sort(); 
     for (var k in testDict) { 
      if (arrays_equal(word_scrambled, testDict[k].split("").sort())) 
       answer.push(testDict[k]); 
     } 
    console.log(answer); 
} 

function arrays_equal(arr1, arr2) { 
    for (var i in arr1) { 
     if (arr1[i]!==arr2[i]) 
      return false; 
    } 
    return true; 
} 

word_unscrambler("kevin", ["trees", "but", "ankle", "nevik", "knive", "evin"]); 
Смежные вопросы