2017-06-10 4 views
0

私は文字列の配列があります(一部制限あり)、文字列の先頭に部分文字列に一致する最良の方法

var myArray = ["blue", "yellow", "purple", "bluegreen", "red"]; 

を、私がいることを別の文字列の先頭にこれらの要素のいずれかと一致する必要があります私は与えられた。したがって"redwood""red"と一致する必要がありますが、"evergreen"は一致しません。それは怠惰な試合である必要があります。したがって、は"bluegreen"と一致する必要があります。"blue"ではありません。

文字列内のすべての文字について、配列内のすべての要素を繰り返し処理することで、確かにこれを達成できますが、これは計算コストが高いようです。私は良い方法があると確信していますが、私はそれを理解しているようには見えません。あなたが一定の配列を持っている、と多くの検索を行う場合は、ソートして起動することができます

var myArray = ["blue", "yellow", "purple", "bluegreen", "red"]; 
 

 
function findMatch(search) { 
 
    return myArray.reduce(function(r, str) { 
 
    return search.startsWith(str) && str > r ? str : r; 
 
    }, ''); 
 
} 
 

 
var result = findMatch('bluegreenskygrass'); 
 

 
console.log(result);

+0

私の推測では、それは確認して、myArray' 'のために問題張り出すでしょうが'それは最初にそれと一致するように、 'blue'の前にあるbluegreen'。 – ModerateJavaScriptDev

+0

['String.prototype.startsWith'](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith) – Emissary

+0

それだけでも、並べ替えを行わないと動作しないことがあります、それは確かに '青 'に一致する原因になります – ModerateJavaScriptDev

答えて

2

あなたは、Array#reduceを使用Array#startsWithを使用して一致を検索し、最長一致を取ることができます長さで配列を(降順に)返し、Array#findを使用します。一致が見つかるとすぐに検索が停止します。

var myArray = ["blue", "yellow", "purple", "bluegreen", "red"]; 
 

 
myArray.sort(function(a, b) { 
 
    return b.length - a.length; 
 
}); 
 

 
function findMatch(search) { 
 
    return myArray.find(function(str) { 
 
    return search.startsWith(str); 
 
    }); 
 
} 
 

 
var result = findMatch('bluegreenskygrass'); 
 

 
console.log(result);

関連する問題