2017-01-05 4 views
0

Ich bin ein Anfänger in JS und versuche nur zu verstehen, was in unten Code vorgeht. Wahrscheinlich ist es etwas dummes aber - naja, wie ich schon sagte, ich bin ein Anfänger;)Seltsames Verhalten von Array - kann nicht verstehen, warum

Zuerst ist es nur Split-Array, die ein Argument der makeFriendlyDates(['2016-07-01', '2016-08-04']); Funktion ist.

Also, in diesem Stadium sieht alles gut aus. Jedoch, wenn ich function changeToFriendly(arr1); rufe, das nur Grund besteht, Zahlen in Monatsnamen zu ändern, ändert es irgendwie newArr ebenso.

Also, wenn ich diese Zeile aus kommentieren: //changeToFriendly(newArr); dann ist newArr was sein sollte, aber wenn die changeToFriendly(newArr); genannt wird, um es ändert sich irgendwie newArr statt Monatsnamen nur zurück.

Meine Frage ist, wie changeToFriendly(newArr); kann newArr ändern, wenn die Funktion nichts mit dem Array tun, nur durchqueren und die Nummer mit Monatsnamen überprüfen.

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>

+3

'for..in' ist für Schleifenobjekte, nicht für Arrays; Sie möchten eine normale 'for'-Schleife. – elclanrs

+0

Ist Array auch kein Objekt? – S1awek

+0

Dies ist ein sehr einfacher Fehler zu machen. 'for ... in' ist in seiner Bedeutung fast täuschend. – Amy

Antwort

5

Ihr Problem ist wahrscheinlich die einzige = hier:

for (elem1 in arr1) { 
     if (arr1[elem1][1] = '01') { 
         ^^^ 

... die Ihr if bedeutet immer true ergibt.

+1

Sie sollten keine Tippfehler beantworten. Schließen Sie es stattdessen – 4castle

+0

Es kann ein Tippfehler sein, aber die Erklärung von _why_, die zu dem Verhalten führt, ist IMO lohnenswert. – Madbreaks

+0

@ 4castle Ja, Sie haben Recht mit dem Tippfehler, aber ich verstehe immer noch nicht, wie es sich ändert, NewArr? – S1awek

0

Etwas wie das Folgende sollte funktionieren.

function makeFriendlyDates (arr) { 

    // Splits each element of the array, and returns an array of results 
    var splitArr = arr.map(function (el) {return el.split('-');}); 

    // Prefer console.log to printing to HTML 
    // document.getElementById('result').innerHTML = splitArr; 
    console.log(splitArr); 

    var monthNames = ["January", "February", "March", "April", 
    "May", "June", "July", "August", "September", "October", 
    "November", "December" 
    ]; 

    // See http://stackoverflow.com/a/1643468/1327983 
    splitArr.forEach(function (el) { 
    var month = monthNames[ parseInt(el[1])-1 ]; 
    // What do you want to do with it from here? 
    el[1] = month; 
    }); 

    // Demonstrate results 
    console.log(splitArr); 
} 

makeFriendlyDates(['2016-07-01', '2016-08-04']);