もりけん塾で新たに追加された課題….「 言語チャレンジ 」に取り組んでいます。
課題はあらかじめinputする値が決まっていて、outputの値が戻り値になる様なコードを書きます
ここではoutputの値が、課題で提示されている通りになっていればクリアとなります。
今回は、課題20に取り組みました!
課題20
Return the result of adding the elements next to each other as an array.
input
[1, 2, 4, 10, 12]
output
[3, 6, 14, 22]
loopさせて、条件分岐させればできそう
配列内の最後の要素以外、隣の値と足し算する条件式にしてみよう
for文
const input = [1, 2, 4, 10, 12];
let result = [];
for (let i = 0; i < input.length - 1; i++) {
result[i] = input[i] + input[i + 1];
}
console.log(result);
// output [3, 6, 14, 22]
まずはfor文で書いてみました。
loopの条件は i < input.length - 1
としました
また、インクリメントで書いてしまうと意図しない挙動になります
let result = [];
for (let i = 0; i < input.length - 1; i++) {
result[i] = input[i] + input[++i];
}
console.log(result);
// output [3, empty, 14]
二重でインクリメントが起こり 変数 iの値が意図していない値になってしまいました
map
新しい配列を返したいから map使ってみよう
const input = [1, 2, 4, 10, 12];
const f = (parma) => {
return parma.map((value, index) => {
if (index < parma.length - 1) {
return value + input[++index];
}
});
}
console.log(f(input));
// output [3, 6, 14, 22, undefined]
最後の要素が条件式で弾かれ、明示的に返すものが指定されていない為 undefinedが返りました….
filterを使用して、undefinedだけ取り除きました
値がTruthyであれば値が返り 新たな配列が返りました
const f = (parma) => {
return parma.map((value, index) => {
if (index < parma.length - 1) {
return value + input[++index];
}
});
}
const result = f(input).filter((value) => value);
console.log(result);
// output [3, 6, 14, 22]
reduce
reduceを使用して、条件に一致する値のみ計算し 新しい配列に格納しよう
const input = [1, 2, 4, 10, 12];
const f = (parma) => {
return parma.reduce((result, value, index, array) => {
if (index < array.length - 1) { // 最後の要素以外であれば隣の値を足す
result[index] = value + array[++index];
}
return result;
}, []);
}
console.log(f(input));
// output [3, 6, 14, 22]
以上です
コメント