JavaScript對象復制(二)


   <script>
        function copy(a) {
            ret = {};
            for (sth  in a) {
                temp = a[sth];
                if (temp instanceof Array) {
                    var ddddd = [];
                    for (i in temp) {
                        var b = copy(temp[i]);
                        ddddd = ddddd.concat(b);
                    }
                    ret[sth] = ddddd;
                }
                else {
                    ret[sth] = a[sth];
                }
            }
            return ret;
        }
       console.log
       (
               copy({name:"馬良",age:"31",Books:[{name:"C#入門經典",title:"好書"},
           {name:"js入門經典",title:"好書"}]}
               )
       );
    </script>

運行上面的代碼,發現copy方法不正確,讓我的同事李鑫看了一下,后來經過大家的一番討論,才發現里面的問題。

js語言不嚴謹,臨時變量得使用,在遞歸調用時容易混淆,解決問題的方式就是不用臨時變量,都用直接變量。

改變后得代碼如下

   <script>
        function copy(a) {
            ret = {};
            for (sth  in a) {
                if (a[sth] instanceof Array) {
                    ret[sth]=[];
                    for (i in a[sth]) {
                        ret[sth].push(copy(a[sth][i]));
                    }
                }
                else {
                    ret[sth] = a[sth];
                }
            }
            return ret;
        }
        console.log
        (
                copy({name:"馬良",age:"31",Books:[{name:"C#入門經典",title:"好書"},
                    {name:"js入門經典",title:"好書"}]}
                )
        );
    </script>

可是改了以后,還是不對,誰能幫助我下。給你發個紅包沒問題的,100以下的都行。

 

通過一段時間的技術積累,終於把問題解決了,給大家獻上代碼

    <script>
        function copy(a) {
            var ret = {};
            for (var sth in a) {
                var temp = a[sth];
                if (temp instanceof Array) {
                    var ddddd = [];
                    for (i in temp) {
                        var b = copy(temp[i]);
                        ddddd = ddddd.concat(b);
                    }
                    ret[sth] = ddddd;
                }
                else {
                    ret[sth] = a[sth];
                }
            }
            return ret;
        }
        console.log
        (
                copy({name:"馬良",age:"31",Books:[{name:"C#入門經典",title:"好書"},
                    {name:"js入門經典",title:"好書"}]}
                )
        );
    </script>

結果如下

里面的變量經常會變,經過調查發現之前的變量沒有var 關鍵字,以至於變量都是全局變量,所以上面的代碼中的變量前面都加var,保持變量的獨立性。

變量 var和不加var的區別在於var 聲明的變量是局部變量。不用var生命的變量是全局變量。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM