前にn文字ずつに分割するsplitを作りましたが、今回はn個に分割します

"a=b=cd=ef".splitn("=",2);
// ["a","b=cd=ef"]
となるようにします

どの言語だったかは覚えてないんですが、普通のsplitの第二引数に数字渡せばこういう風にしてくれるのがありました
でもJavaScriptは、第二引数に数字渡してもと分割してしまったのを前からn個もってくるという動作になるので
"a=b=cd=ef".split("=",2)["a","b"] です
"a=b=cd=ef".split("=").slice(0,2) と一緒です

ということ作ったコードです
String.prototype.splitn = function(sep,n){
if(isNaN(n=parseInt(n))) return null;
if(--n<0) return [];
if(sep instanceof RegExp){
if(!sep.global){
var re = sep.toString().match(/^\/(.*)\/(.*)$/);
if(!re) return;
sep = new RegExp(re[1],re[2]+"g");
}
var r, i=0, result=[];
while(n-- && (r = sep.exec(this))){
result.push(this.substring(i,r.index));
i = sep.lastIndex;
}
if((r = this.substr(i))!=="") result.push(r);
return result;
}else{
var s = this.split(sep);
return s.slice(0,n).concat(s.slice(n).join(sep))
}
};
splitは正規表現も使えるのでそっちも対応させるとちょっと長くなりました
if(!sep.global){~} は、渡された正規表現をgフラグ付けて使いたいので、正規表現オブジェクトを作り直してます
sep.global = true としてもフラグ変更はできないのでちょっとめんどうです

デフォルトの第二引数機能は上に書いたようにsliceつけるだけでいいのでコッチがメインになるだろうしsplitを上書きしようかなとも思ったけどとりあえず残しとこう ということでsplitnという名前にしています