JavaScript第5版読書会#1で話題にあがった「配列の初期値を指定する方法」について、higeorangeさんのBlogにコメントしました。
処理の関係上、初期値には一文字の文字列しか指定できません。
また、空文字の場合正常に動作しないため、例外処理が必要になります。
function arrayFill(num,str){
if(str.constructor!=String||str.length!=1){
return new Array(num);
}else if(str==""){
return (new Array(num)).join("*").split("*");
}else{
return (new Array(num+1)).join(str).split("");
}
}
この、「一文字の文字列しか指定でき」ない制限を打破できないかと思い、実装を試みてみます。
function arrayFill(num,str){
if(str.constructor!=String){
return new Array(num);
}else if(str==""){
return (new Array(num)).join("*").split("*");
}else{
var dummy="";
//初期値に部分一致しない文字列の作成
while(str.indexOf(dummy)!=-1){
dummy+=String.fromCharCode(Math.floor(Math.round()*26)+65);
}
return ((new Array(num)).join(str+dummy)+str).split(dummy);
}
}
if(str.constructor!=String){
return new Array(num);
}else if(str==""){
return (new Array(num)).join("*").split("*");
}else{
var dummy="";
//初期値に部分一致しない文字列の作成
while(str.indexOf(dummy)!=-1){
dummy+=String.fromCharCode(Math.floor(Math.round()*26)+65);
}
return ((new Array(num)).join(str+dummy)+str).split(dummy);
}
}
一見、うまく動作しそうですが、「strとdummyの接合部分でdummyと一致する文字列が生成」された場合、不具合が生じてします。例えば、「atr="AB";dummy="ABA";」となってしまった場合です。
他にも色々と試してみましたがうまくいきません。諦める事にします。
他にも色々と試してみましたがうまくいきません。諦める事にします。