2016-10-23 2 views
0

Schreiben Sie eine Funktion offOne(word, book), die eine Zeichenfolge namens word und ein Array von Strings book genannt. Es gibt ein Array aller word s in book der gleichen Länge, die einen Buchstaben unterschiedlich sind.Vergleichen Sie ein Wort mit Wörtern in einem Array

Beispiele:

offOne("cat", ["cat", "fat", "flat", "tar"]) => ["fat", "tar"] 
offOne("will", ["wilt", "willow", "wail"]) => ["wilt", "wail"] 

Meine Funktion ist zur Zeit:

function offOne(word, book) { 
    var array = []; 
    var count = 0; 

    for (var i = 0; i < book.length; i++) { 
     if (book.length === word.length) { 
      if (word.indexOf(book[i]) !== -1) { 
       count += 1; 

       if (count === (book[i].length - 1)) { 
        array.push(book[i]); 
       } 
      } 
     } 
    } 
    return array; 
} 

Wer weiß, wie diese zu lösen? Ich blieb hier eine Weile stecken.

+1

Oder könnte ein Pre-Interview Screening-Frage sein? –

+0

Die Frage ist nicht gut in dem Sinne, dass es meiner Meinung nach nicht wirklich SO konform ist. Was genau ist dein Problem? Ich bezweifle, dass Sie eine Antwort erhalten würden, die den Algorithmus zur Lösung Ihrer Aufgabe liefert. Die Funktionsdefinition macht mir nicht viel Sinn und ich habe das Gefühl, dass du JavaScript nicht so gut verstehst; versuche von dort auszugehen: Länge des Buches und Länge des Wortes - warum würdest du die Länge eines Strings mit der Länge eines Arrays vergleichen? – Elyasin

+0

Dies ist eine meiner 50 Vorbereitungsfragen zur Vorbereitung auf einen Kurs. – DoeDoeDoe

Antwort

1

Die Schnipsel sind gut mit Kommentaren angesprochen. Es sollte dir helfen. Überprüfen Sie es!

Punkte für Ihre prep erinnern:

  1. Sie erklären nicht unnötig Variablen. Es verbraucht Speicher, was schlecht ist.
  2. Verwenden Sie keine unnötigen Schleifen. Suchen Sie vor der Verwendung von Schleifen nach der verfügbaren Sprach-API. Wie habe ich filter statt foreach verwendet. Diese werden Ihre Arbeit reduzieren.
  3. Immer in Betracht ziehen Logical operators.
  4. Machen Sie den Code dead einfach.

Viel Glück für Ihren Kurs!

Meine Art und Weise tun

var word = "cat"; 
 
var book = ["car", "far", "mars", "call", "bat"] 
 

 
function compare(elm, word) { 
 
    var i = 0 
 
    elm.split('').forEach(c => { //tokenize elm of book into array 
 
    if (word.indexOf(c) > -1) //check if charecter in present in the word 
 
     i += 1 //if yes, increment 
 
    }) 
 
    return i === word.length - 1 ? true : false //return true if length of i is (length of word - 1), 
 
} 
 

 
function offOne(word, book) { 
 
    return book.filter(elm => 
 
    // check, if the length of both strings are not same and 
 
    // both strings are not same and 
 
    // compare strings, true will be returned if the condition is satisfied in compare() 
 
    elm.length === word.length && elm !== word && compare(elm, word) 
 
) 
 
} 
 

 
console.log(offOne(word, book))

Meine erweiterte Art und Weise tun

Wenn Sie sehen, dieser hat keine Variablen innerhalb erklärt die Funktionen.

var word = "cat"; 
 
var book = ["car", "far", "mars", "call", "bat"] 
 

 
function compare(elm, word) { 
 
    return elm.split('').filter(c => //tokenize elm of book into array 
 
    word.indexOf(c) > -1 //check if charecter in present in the word, if yes, return true 
 
).join('').length === word.length - 1 ? true : false //join and check the length of the array is one less than length of the word, if yes, return true 
 
} 
 

 
function offOne(word, book) { 
 
    return book.filter(elm => 
 
    // check, if the length of both strings are not same and 
 
    // both strings are not same and 
 
    // compare strings, true will be returned if the condition is satisfied in compare() 
 
    elm.length === word.length && elm !== word && compare(elm, word) 
 
) 
 
} 
 

 
console.log(offOne(word, book))

0

Konvertieren Sie ein Wort in ein Array von Buchstaben, machen Sie dieses Array einzigartig. Für jedes Buch-Array-Element machen Sie das gleiche und berechnen Sie die Anzahl der verschiedenen Zeichen zwischen ihnen. Wenn nur ein Unterschied gefunden wird, den Gegenstand zurückgeben und für jeden wiederholen.

+0

also muss ich das Wort teilen, iterieren über sie, überprüfen Sie den IndexOf für Buch, aber wie überprüfe ich, ob nur ein Unterschied gefunden wird? – DoeDoeDoe

+0

Sie können über Elemente eines Arrays iterieren und den Zähler für jedes Element erhöhen, das nicht in dem zweiten enthalten ist. Das sind die Grundlagen der Programmierung. –

Verwandte Themen