私はJSの初心者で、以下のコードで何が起こっているのかを理解しようとしています。おそらくそれは何かばかだが、私が言ったように、初心者だよ)配列の奇妙な動作 - 理由を理解できない
まず、makeFriendlyDates(['2016-07-01', '2016-08-04']);
の引数である配列を分割するだけである。
だから、この段階ではすべてが大丈夫です。しかし、私がfunction changeToFriendly(arr1);
と呼ぶときには、数字だけを月の名前に変えて、どういうわけかnewArr
も変えてしまいます。私は、この行をコメントアウトする場合
だから://changeToFriendly(newArr);
はその後newArr
はあるべきであるものですが、changeToFriendly(newArr);
が呼び出された場合、それは何とかちょうど月の名前を返す代わりにnewArr
を変更します。
私の質問は、newArr
が、配列を使って何もしない場合、それを横断して月の名前に対応する番号を調べるだけで、newArr
を変更できることです。
function makeFriendlyDates(arr) {
var newArr = [];
var elem;
for (elem in arr) {
newArr.push(arr[elem].split('-'));
}
document.getElementById('result').innerHTML = newArr;
function changeToFriendly(arr1) {
var month = '';
var elem1;
for (elem1 in arr1) {
if (arr1[elem1][1] = '01') {
month = 'January';
} else if (arr1[elem1][1] === '02') {
month = 'February';
} else if (arr1[elem1][1] === '03') {
month = 'March';
} else if (arr1[elem1][1] === '04') {
month = 'April';
} else if (arr1[elem1][1] === '05') {
month = 'May';
} else if (arr1[elem1][1] === '06') {
month = 'June';
} else if (arr1[elem1][1] === '07') {
month = 'July';
} else if (arr1[elem1][1] === '08') {
month = 'August';
} else if (arr1[elem1][1] === '09') {
month = 'September';
} else if (arr1[elem1][1] === '10') {
month = 'October';
} else if (arr1[elem1][1] === '11') {
month = 'November';
} else if (arr1[elem1][1] === '12') {
month = 'December';
}
}
document.getElementById('result1').innerHTML = newArr;
return month;
}
changeToFriendly(newArr);
}
makeFriendlyDates(['2016-07-01', '2016-08-04']);
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Title</title>
</head>
<body>
<p id="result"></p>
<p id="result1"></p>
</body>
</html>
'for..in'はループオブジェクト用であり、配列用ではありません。通常の 'for'ループが必要です。 – elclanrs
配列もオブジェクトではありませんか? – S1awek
これは非常に簡単な間違いです。 「〜のために〜」は、その意味においてほとんど欺瞞的です。 – Amy