文字が入力されたときに文字列のリストをソートしようとしています。「Dog」、「Ball」、「Rabbit」、「Pizza」などの文字列があり、ユーザーが「d」を入力すると、最初に「Dog」、次に「Ball」、次に「Pizza」、最後に「Rabbit」が来るとします。 」が表示されるはずです。
この機能を実現する方法。手がかりをください。
文字が入力されたときに文字列のリストをソートしようとしています。「Dog」、「Ball」、「Rabbit」、「Pizza」などの文字列があり、ユーザーが「d」を入力すると、最初に「Dog」、次に「Ball」、次に「Pizza」、最後に「Rabbit」が来るとします。 」が表示されるはずです。
この機能を実現する方法。手がかりをください。
このコードを使用できると思います。最適化されていませんが、アイデアを得ることができます
<script type="text/javascript">
function fnc()
{
var arr=new Array;
var arr1=new Array;
arr[0]="dog";
arr[1]="pizza";
arr[2]="doll";
for(i=0;i<arr.length;++i)
{arr1[i]=arr[i].length;}
arr1=arr1.sort();
alert(arr1);
}
</script>
<input type="button" onclick="fnc()" />
var reg = /^d/i; //reg exp to check array item first char
['Pizza', 'Dog', 'Ball', 'Foo'].sort(
function(a, b) {
if (reg.test(a)) {
if (reg.test(b))
return a > b;
return -1;
}
if (reg.test(b)) {
if (reg.test(a))
return a > b;
return 1;
}
return a > b;
})
["犬"、"ボール"、"フー"、"ピザ"] を返します
現在の入力に応じてソート関数を生成します。
現在の入力が並べ替えの 1 つの項目に一致する場合は、最初にそれをデフォルトに設定します。両方に一致するか、どちらにも一致しない場合は、通常の文字列比較を行います。
function generateSortFunction(str){
var s = str.toLowerCase(), sl = s.length; // save re-computation
return function sort(a,b){
var am = +( a.length >= sl && a.slice(0, sl).toLowerCase() === s ),
bm = +( b.length >= sl && b.slice(0, sl).toLowerCase() === s );
if( am ^ bm ) return bm - am; // XOR then -1 if a first, 1 if b first.
return a.localeCompare(b); // else sort normally
};
}
// Using it
["Dog", "Ball", "Rabbit", "Pizza"].sort( generateSortFunction('d') );
// results in ["Dog", "Ball", "Pizza", "Rabbit"]
上記のコードは入力を として使用し'd'
、必要に応じて変更します。