2016-07-23 59 views
-2

如果我使用錯誤的術語,我是新來的代碼,請道歉(請更正我)。我正在做下面的編碼挑戰:給定一個具有多個值的數組,寫一個函數,返回一個只包含原始數組的最大值,最小值和平均值的新數組。當命令行順序很重要嗎?

這是我我第一次嘗試時想出了代碼: First attempt

後來我想通了,通過試錯,問題是我arrnew變量的位置。我還修正了平均表達式,正確的算法是:Correct algorithm

我認爲自max,min和avg發生變化(對此有更好的術語嗎?),var arrnew會提取這些新值但顯然情況並非如此。我想我的問題是行順序何時關係?或者更具體地說,是否有任何簡單的規則或原則可以幫助我更好地理解命令行編碼(我不知道這是否稱爲命令行編碼)。

感謝

+0

你的解決方案很好,不知道你問了什麼。 – zerkms

+0

命令行與* JavaScript *有什麼關係? JavaScript在瀏覽器中,命令行在機器上。數組是使用這些初始值創建的,*不會隨着數組內值的變化而改變。 – Li357

+0

@AndrewL。他們不知道正確的術語,所以只是猜測。 (請參見問題中的最後一個陳述) – zerkms

回答

1

當你這樣做:

var arrnew = [max, min, avg]; 

這地方的maxminavg內容拷貝到陣列中。對maxminavg包含的未來更改不會以任何方式影響數組。

所以,如果你這樣做;

var max = 3, min = 1, avg = 2; 
var arrnew = [max, min, avg]; // 3, 1, 2 
max = 5; 
console.log(arrnew);    // 3, 1, 2 

注,arrnew的內容不會被後來的變化是什麼maxminavg包含影響都沒有。這就是Javascript(以及大多數語言的工作原理)。

+0

好的,這是我正在尋找。所以大多數語言不會重新編譯(是否正確的詞?)變爲變量?如同一樣,一旦記錄了數值(例如,arrnew),隨後對max,min,avg的任何更改都不會覆蓋原始數據,因爲它已經被「鎖定」了? – Dinamo788

+0

@ Dinamo788 - 語言通常具有作業和參考/指針。分配將一個值從一個地方複製到另一個地方,一旦它被複制,它就是它自己的數據副本 - 完全獨立於原始數據。這就是你在這裏做的。 – jfriend00

+0

@ Dinamo788 - 如果你想了解更多關於這個概念的知識,你可以閱讀這個[在javascript深度或淺拷貝中將對象推入數組中嗎?](http://stackoverflow.com/questions/8660901/do-對象被推入到數組中 - 深度或淺 - 複製/ 8661088#8661088)和[通過引用與值的JavaScript](http://stackoverflow.com/questions/6605640/javascript通過參考與價值) – jfriend00

0

這是因爲編譯器,編譯器將始終從頂部到底部去,所以總是試圖構建你的代碼在一個有序的方式。

+0

好吧,編譯器不會重新編譯任何東西,除非有更改變量值的操作。謝謝 – Dinamo788