📄 String Operation
1. String を指定回数繰り返す操作
文字列を指定した回数だけ繰り返す関数を設計してみましょう。
I. repeat() solution(ES6+) を使用
現在 String は repeat() をサポートしているため、直接使用できます。
const repeatedString = 'Pitt';
console.log(`Name Repeat : ${repeatedString.repeat(3)}`); // "Name Repeat : PittPittPitt"
Reference
II. ループを使用
repeat() を使わない場合、ループを使って正の整数のみを受け付けるようにパラメータで制約できます。
function repeatString(str, num) {
// 正の整数でないかチェック
if (num < 0 || !Number.isInteger(num)) {
throw new Error('正の整数を入力してください');
}
let repeatedString = '';
for (let i = 0; i < num; i++) {
repeatedString += str;
}
return repeatedString;
}
2. String 内のファイル名または拡張子を処理する
getFileExtension() を設計し、パラメータから動画の拡張子フォーマットを取得します。拡張子がない場合はファイル名を返します。
const fileName = 'video.mp4';
const fileNameWithoutExtension = 'file';
const fileNameWithoutExtension2 = 'example.flv';
const fileNameWithoutExtension3 = 'movie.mov';
const fileNameWithoutExtension4 = '.gitignore';
I. split を使ってファイル名を取得
const getFileExtension = (fileName) => {
const fileNameSplit = fileName.split('.');
return fileNameSplit[fileNameSplit.length - 1];
};
console.log(getFileExtension(fileName)); // "mp4"
console.log(getFileExtension(fileNameWithoutExtension)); // "file"
console.log(getFileExtension(fileNameWithoutExtension2)); // "flv"
console.log(getFileExtension(fileNameWithoutExtension3)); // "mov"
console.log(getFileExtension(fileNameWithoutExtension4)); // ""
3. 配列内の最長文字列を見つける
I. sort() メソッドを使用
const stringArray = ['apple', 'banana', 'orange', 'kiwi', 'strawberry'];
const longestString = (stringArray) => {
return stringArray.sort((a, b) => b.length - a.length)[0];
};
console.log(longestString(stringArray)); // "strawberry"
II. reduce() メソッドを使用
const stringArray = ['apple', 'banana', 'orange', 'kiwi', 'strawberry'];
const longestString = (stringArray) => {
return stringArray.reduce(
(acc, cur) => (acc.length > cur.length ? acc : cur),
''
);
};
console.log(longestString(stringArray)); // "strawberry"
4. 文字列をキャメルケースに変換する
文字列をキャメルケースに変換する関数を設計してみましょう。
I. replace() メソッドを使用
const camelCase = (str) => {
return str.replace(/-([a-z])/g, (match, char) => char.toUpperCase());
};
console.log(camelCase('hello-world')); // "helloWorld"
II. split() メソッドを使用
const camelCase = (str) => {
return str
.split('-')
.map((word, index) =>
index === 0 ? word : word.charAt(0).toUpperCase() + word.slice(1)
)
.join('');
};
console.log(camelCase('hello-world')); // "helloWorld"
5. 配列内の重複文字列の出現回数を見つける
I. Map() メソッドを使用
const stringArray = [
'apple',
'banana',
'orange',
'kiwi',
'strawberry',
'apple',
];
const countDuplicateString = (stringArray) => {
const map = new Map();
stringArray.forEach((item) => {
map.set(item, (map.get(item) || 0) + 1);
});
return Object.fromEntries(map);
};
console.log(countDuplicateString(stringArray)); // { apple: 2, banana: 1, orange: 1, kiwi: 1, strawberry: 1 }
II. reduce() メソッドで重複文字列の回数を見つける
const stringArray = [
'apple',
'banana',
'orange',
'kiwi',
'strawberry',
'apple',
];
const countDuplicateString = (stringArray) => {
return stringArray.reduce((acc, cur) => {
acc[cur] = (acc[cur] || 0) + 1;
return acc;
}, {});
};
console.log(countDuplicateString(stringArray)); // { apple: 2, banana: 1, orange: 1, kiwi: 1, strawberry: 1 }
III. Object.groupBy() メソッドを使用(ES2023+)
const stringArray = ['apple', 'banana', 'orange', 'kiwi', 'strawberry'];
const countDuplicateString = (stringArray) => {
return Object.groupBy(stringArray);
};
console.log(countDuplicateString(stringArray)); // { apple: 2, banana: 1, orange: 1, kiwi: 1, strawberry: 1 }
6. 配列内の文字列の拡張子を見つけ、重複する拡張子をフィルタリングする
I. split() メソッドを使用
const files = [
'document.docx',
'image.jpg',
'script.js',
'style.css',
'data.json',
'image.png',
'new-image.png',
];
const getFileExtension = (files) => {
return files
.map((file) => file.split('.').pop())
.filter((file, index, self) => self.indexOf(file) === index);
};
console.log(getFileExtension(files)); // ["docx", "jpg", "js", "css", "json", "png"]