[閒聊] 陣列.slice()

作者: laechan (揮淚斬馬雲)   2020-10-22 11:39:10
我不太清楚是否有其它做法,但是至少它是可以 work 的。
首先若以 sanc 來說,如果做如下宣告
mixed tmps=({1,2,({3,4})});
mixed tmps1,tmps2;
tmps1=tmps;
tmps2=tmps;
tmps1[2][1]=5;
write("tmps1="+identify(tmps1)+"\ntmps2="+identify(tmps2)+"\n");
它的執行結果
tmps1={1,2,{3,5}}
tmps2={1,2,{3,5}}
在 javascript 裡頭,如果用相同的寫法,當 tmps1 的值變更時,tmps2
的值也會跟著變更。
javascript 的場合,我後來使用以下的寫法
tmps1=tmps.slice(); // 將 tmps 裡面的東西 copy 給 tmps1
tmps2=tmps.slice(); // 將 tmps 裡面的東西 copy 給 tmps2
仍是不行,這是因為 tmps 裡面有一個子陣列 [3,4],必須連這個也使
用 slice copy 才行,所以後來採用的土法煉鋼做法:
n=tmps.length;
tmps1=new Array(n);
tmps2=new Array(n);
for(i=0;i<tmps.length;i++)
{
tmps1[i]=tmps[i].slice();
tmps2[i]=tmps[i].slice();
}
這樣 tmps1 及 tmps2 才會是互相獨立的個體,有幾個子陣列就得這樣
做或採用別的寫法,來確保每一個元素都是複製過去的而非只是"指向"
,指向的結果就是當元素改變時,指向它的另一個陣列的元素也會跟著
改變。
==============================================================
最近就是都在公司搞這些東西,算是超前部署,當明年突然被要求要交
什麼什麼的時候,有東西可以馬上 show 出來,主要是參考以下的電影
https://www.youtube.com/watch?v=dUKWDxKAlk4
https://www.youtube.com/watch?v=jnzzKCUdvG8
電影裡的 fortran 編程其實也不是什麼高深的學問,跟 javascript在
我公司、我單位的利用大致差不多,但是,javascript 實際上是相當
好用的東西,即便是像我這樣自學且只是會一點皮毛這樣。
因為它一直很好用,在我的工作上,所以我一直在寫相關的東西。那經
過長時間的驗證,coding 改用 notepad++ 並改為黑底綠字後,已經沒
再出現眼睛神經不正常抽動的情況。
只是目前還不確定會不會再 coding sanc。該寫的系統都寫了,系統寫
好後要讓它 work 就得寫副本及建資料,這部份我就不行了,說到底只
有一個人要發展真的挺困難的,除非我能全心全力把時間跟精力都用在
sanc,但目前光以工作來說,我的工作環境就比以前複雜了。
近況大概是這樣,藉這篇順便。
Laechan
作者: pandamilktea (熊貓奶茶)   2020-10-23 10:11:00
如果有用到jquery可以用extend的方式複製出來

Links booklink

Contact Us: admin [ a t ] ucptt.com