2017-07-15 1 views
1

Könnt ihr mir ein paar Beispiele oder Links in Bezug auf folgende Aufgabe:Können Sie Filterbeispiele zusammensetzen?

var companies = [{ 
     members: [{ 
       name: 'John' 
      }, 
      { 
       name: 'Victor' 
      }, 
      { 
       name: 'Roan' 
      } 
     ] 
    }, 
    { 
     members: [{ 
       name: 'John' 
      }, 
      { 
       name: 'Roan' 
      } 
     ] 
    } 
] 

In

<input type='text'> 

Als ich "John und Victor" geben - Ich möchte Unternehmen erhalten [0] Objekt

Wenn ich "John und nicht Victor" eingeben - Ich möchte Unternehmen [1] Objekt

Die FRAGE ist wie man Text zu parsen und es verstehen, wo ich S UND NICHT? Hoffe ich erklärte gut. Vielen Dank im Voraus und einen schönen Tag!

+0

Niemand wird Ihnen helfen, wenn Sie nicht erklären, was Sie versucht haben – Alburkerk

Antwort

1

Hier ist die Funktion, Namen und nicht Namen zu verfeinern. Sie können das Array selbst filtern.

function searchCompanies(text) { 
     var nameand = [], 
      namesNot = []; 
     text = text.replace(/\s\s+/g, ' '); //remove multiple whitespace 
     var words = text.split(' '); 
     for (var i = 0; i < words.length; i++) { 
      var word = words[i].toLowerCase(); 
      if (i == 0) 
       text.push(words[i]); 
      else if (word != 'and' && word != 'not') { 
       if (words[i - 1].toLowerCase() != 'not') 
        text.push(words[i]); 
       else 
        namesNot.push(words[i]); 
      } 
     } 
    } 
+0

verstanden. Vielen Dank. Ich dachte, es gäbe einige Bibliotheken dafür. Danke noch einmal – Serhiy

0

Sie möchten Text analysieren und Code darauf ausführen. Das kann knifflig werden, deshalb ist es das Ziel, die Regeln des Systems so einfach wie möglich zu machen. In diesem Fall müssen wir einen Namen von Stichwörtern wie and oder not unterscheiden. Wir könnten eine Liste wie const keywords = ['and', 'not'] pflegen und alles, was NICHT in dieser Liste ist, als Namen behandeln. Was ist mit der Groß-/Kleinschreibung? Sollte And als Name behandelt werden, weil es großgeschrieben wird? Großschreibung wäre eine bequeme Möglichkeit, Namen von Nicht-Namen zu unterscheiden.

Dies ist nur die Spitze des Eisbergs.

Aber okay, nehmen wir an, das Problem ist so einfach wie es gesagt wird. Wir wollen nur das absolute Mindestziel erreichen. Ich gehe davon aus, dass alle Namen enthalten sein sollten und not ist das einzige wirklich aussagekräftige Schlüsselwort. Ich werde alle Namen ausschließen, denen not vorausgeht.

// Extremely naive, not suitable for production. Will get 
// tricked by whitespace and other simple things. 
const isName = (str) => { 
    return str[0] === str[0].toUpperCase(); 
}; 

const input = document.querySelector('input[type="text"]'); 
input.addEventListener('change', (evt) => { 
    const tokens = evt.target.value.split(' '); 
    const names = tokens.filter((name, i, arr) => { 
     return isName(name) && arr[i - 1] !== 'not'; 
    }); 
    const company = { 
     members : names.map((name) => { 
      return { name }; 
     }) 
    }; 
}); 
Verwandte Themen