Javascript問題集(関数)解答
「Javascript問題集(関数)」の解答は下記になります。
問題1の解答
オブジェクトを返す場合、return文にオブジェクトを直接指定します。
function generateHuman(name, age) {
return {
name: name,
age: age
};
}
問題2の解答
「コールバック関数」は、「関数の引数」として渡され、後で呼び出される関数です。
一般的に「非同期操作」に使用されます。
function printData(data, callback) {
for (let i = 0; i < data.length; i++) {
console.log(data[i]);
}
callback();
}
function callbackFunction() {
console.log("Process Finished");
}
printData(["sun", "earth", "moon"], callbackFunction);
問題3の解答
「スプレッド構文」を使用すると、「配列」や「オブジェクト」を展開して、「関数の引数」として渡すことができます。
function sumData(a, b, c) {
return a + b + c;
}
const numbers = [1, 2, 3];
console.log(susumDatamNumbers(...numbers));
問題4の解答
function getDoubleNumber(num) {
return num * 2;
}
この関数は、「引数」として渡された数値を「2倍」にして、その結果を返します。
getDoubleNumber(3)
を呼び出すと、「6」が返されます。
問題5の解答
「ジェネレータ関数」は、「function」キーワードの後ろに「アスタリスク(*)」をつけて定義されます。
「ジェネレータ関数」は、値を返すとともに、「関数の実行」を一時停止し、後で再開することができます。
「ジェネレータ関数」では「nextメソッド」を呼び出すことで「yield」まで処理が実行されます。
function* sampleGenerator(data) {
yield data * 2; //1回目の「nextメソッド」で実行
yield data * 3; //2回目の「nextメソッド」で実行
yield data * 4; //3回目の「nextメソッド」で実行
}
let generator = sampleGenerator(10);
console.log(generator.next().value);
console.log(generator.next().value);
console.log(generator.next().value);
問題6の解答
function reverseString(str) {
return str.split("").reverse().join("");
}
この関数は、引数として渡された文字列を逆順にして、その結果を返します。
たとえば、「reverseString("abcde")」を呼び出すと、「"edcba"」が返されます。
問題7の解答
「クロージャー」は、関数内で定義された関数で、「外側の関数の変数」にアクセスすることができます。
「クロージャー」を使用すると、「外側の関数」が呼び出された後でも、「内側の関数」が「外側の変数」にアクセスすることができます。
function sample() {
let data = "sampleData";
function showData() {
console.log(data);
}
showData();
}
sample();
問題8の解答
function isPdString(str) {
let reversedStr = str.split("").reverse().join("");
return str === reversedStr ? true : false;
}
この関数は、引数として渡された文字列が「回文」であれば「true」を、そうでなければ「false」を返します。
たとえば、「isPdString("ada")」を呼び出すと、「true」が返されます。
問題9の解答
function getMax(arrayData) {
let max = arrayData[0];
for (let i = 1; i < arrayData.length; i++) {
if (arrayData[i] > max) {
max = arrayData[i];
}
}
return max;
}
この関数は、「引数」として渡された「配列」の中で「最大値」を見つけて、その値を返します。
たとえば、
getMax([2, 5, 3, 7, 1, 8]);
を呼び出すと、「8」が返されます。
問題10の解答
「デフォルト引数」とは、「引数」が関数に渡されなかった場合に使用される値です。
「デフォルト引数」を指定するには、「引数」の後に「代入演算子」を使って値を指定します。
function greet(name = "World") {
console.log(`Hello, ${name}!`);
}
greet(); //「引数」を指定していないため「引数name」はデフォルトの値「World」となる。
greet("Smith"); //「引数」を指定しているため、「引数name」は「Smith」となる
問題11の解答
function repeatProcess(func, times) {
for (let i = 0; i < times; i++) {
func();
}
}
「for文」を使って、「指定された回数」だけ関数を繰り返し実行しています。
問題12の解答
function calcSquare(dataArray) {
let squaredArr = [];
for (let i = 0; i < dataArray.length; i++) {
squaredArr.push(dataArray[i] * dataArray[i]);
}
return squaredArr;
}
この関数は、「引数」として渡された「配列の要素を2乗した値」を要素とする「新しい配列を作成」して、その結果を返します。
たとえば、
calcSquare([2, 5, 3, 7, 1, 8]);
を呼び出すと、
[4, 25, 9, 49, 1, 64]
が返ってきます。
問題13の解答
function isEven(num) {
return num % 2 === 0 ? true : false;
}
この関数は、「引数」として渡された数値が偶数であれば「true」を、そうでなければ「false」を返します。
たとえば、
isEven(10)
を呼び出すと、「true」が返されます。
問題14の解答
関数内で「this」キーワードを使用すると、呼び出し元によって「this」の値が異なります。
関数からの呼び出しでは、「this」は「グローバルオブジェクト」になります。
オブジェクトの「メソッド」として呼び出された場合、「this」はそのオブジェクトを指します。
//オブジェクトの場合
const human = {
name: "John doe",
greet() {
console.log(`Hello, ${this.name}!`);
console.log(this); //「this」は「humanオブジェクト」
}
};
human.greet();
//関数の場合
const otherFunc = () => {
console.log(this);//「this」は「グローバルオブジェクト(window)」
}
otherFunc();
問題15の解答
function joinArrayData(arrayData, separator) {
return arrayData.join(separator);
}
「joinメソッド」を使って、「配列の要素」を「指定された区切り文字」で結合した文字列を生成しています。
問題16の解答
「プロミス」を使用すると、「非同期操作」をより簡単に扱うことができます。
「プロミス」は、「非同期操作」が完了すると「resolve関数」を呼び出し、エラーが発生した場合は「reject関数」を呼び出します。
const process = new Promise((resolve, reject) => {
//Success
//処理に成功した時は「resolve」を実行
//resolve("Process Success.");
//Failure
//処理に失敗した時は「reject」を実行
//reject(new Error("Error."));
});
process.then(
(value) => {
console.log(value); // Success!
},
(error) => {
console.error(error); // Error!
},
);
問題17の解答
function roundDecimal(num) {
return Math.round(num * 100) / 100;
}
「Math.roundメソッド」を使って、数値を「小数点以下第二位」で「四捨五入」しています。
具体的には、「引数」の数値に100を掛けてから「Math.roundメソッド」で「四捨五入」し、再度「100」で割ることで、「小数点以下第二位」までの数値に変換しています。
問題18の解答
「アロー関数」は、通常の関数と異なり、「function」キーワードの代わりに「矢印(アロー)」を使用して定義されます。
「アロー関数」は、暗黙的に「return文」を含むため、明示的に「return文」を書く必要はありません。
const sum = (a, b) => a + b; console.log(sum(24, 38));
問題19の解答
function isPositive(num) {
return num > 0 ? true : false;
}
この関数は、引数として渡された数値が正の数であれば「true」を、そうでなければ「false」を返します。
たとえば、
isPositive(-18)
を呼び出すと、「false」が返されます。
問題20の解答
function getSumNumbers(num1, num2) {
return num1 + num2;
}
この関数は、引数として渡された2つの数値を足し合わせて、その結果を返します。
たとえば
sumNgetSumNumbersumbers(5, 7)
を呼び出すと、「12」が返されます