[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ただいまコメントを受けつけておりません。
歯抜けの実装方法が分からないという人がちょっと多いので解説記事。
歯抜けとは、番号が振られた0個以上のリストがある際に、次に追加するアイテムにどんな番号を付けるべきか決定するルールである。例えば、1番から開始するリストがあったとする。
次のようなリストがある
この場合、次に追加するべきアイテムは Item-4 である。
次のようなリストがある
この場合、次に追加するべきアイテムは Item-2 である。
次のようなリストがある
この場合、次に追加するべきアイテムは Item-1 である。
次のようなリストがある
この場合、次に追加するべきアイテムは Item-1 である。
新しいフォルダ(n)の歯抜けを作る。
function generateNextTitle(list) {
// アイテム名が形式に合致するか確認する。
// 番号を取得するために (\d+) している。
// 前後に余計なものが付いていないことを確認するために先頭に ^ 末尾に $ を付加
var regexp = /^新しいフォルダ((\d+))$/;
// 既存の番号を格納するための空配列
var titleNumbers = [];
list.forEach(function(v, i) {
if(regexp.test(v)) {
titleNumbers.push(Number(regexp.exec(v)[1]));
}
});
titleNumbers = titleNumbers.sort();
// 小さい順に並べ、歯抜けがあったら抜けた数字を適用
for(var i = 0; i < titleNumbers.length; i++) {
if(i + 1 !== titleNumbers[i]) {
return "新しいフォルダ(" + (i+1) + ")";
}
}
// 歯抜けが無かったら最大の数字 +1 を適用
return "新しいフォルダ(" + (titleNumbers.length+1) + ")";
}
console.log(generateNextTitle(["新しいフォルダ(1)", "新しいフォルダ(2)", "新しいフォルダ(3)"]));
console.log(generateNextTitle(["新しいフォルダ(1)", "新しいフォルダ(4)", "新しいフォルダ(3)"]));
console.log(generateNextTitle(["_新しいフォルダ(1)_", "_新しいフォルダ(1)", "新しいフォルダ(2)", "新しいフォルダ(3)"]));
ただいまコメントを受けつけておりません。