WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:配列のコピー

0:[投稿] 広 [2002/11/01 18:27 ][環境:WIN+IE わからない]

こん○○は、さっそくですがJavaScriptの質問です。
var a=new Array(1,2,3)
として、そのコピーはどうやったら作れますか?
var b=new Array()
for(var i=0;i<a.length;i++) {b[i]=a[i]}
とすると遅いかなと思いまして、なんかあったら教えて下さい。


1:[回答] JTR [2002/11/01 18:40 ]

var a=new Array(1,2,3);
var b=a;
とか。


2:[回答] ween [2002/11/01 19:53 ]

>>1
それは同じオブジェクトを別の変数に代入しているだけでは…

>>0
IE5.5以上, NN4.06以上になりますけれども
var b = Array.apply( null, a );
とか。速いかどうかは解りません。


3:[回答] JTR [2002/11/01 20:42 ]

>>2
>それは同じオブジェクトを別の変数に代入しているだけでは…
全くもって御意。ボケ->自分(恥)。

weenさん、いつもありがとうございます!


4:[回答] ma-to [2002/11/01 21:47 ]


>>2

    var b=cloneArray(a);

    function cloneArray(a){
        if(typeof window.Function!='undefined'&&Function.prototype.apply)
            return Array.apply(null, a);
        else if(typeof Array.prototype!='undefined'&&Array.prototype.slice)
            return a.slice(0);
        else{
            var
                b=new Array,
                c=a.length,
                i=0;
            for(; i<c; i++)
                b[i]=a[i];
            return b;
        }
    }

とするのが自然であるとしても、手短に cloneArray を

    function cloneArray(a){
        if(typeof Array.prototype!='undefined'&&Array.prototype.slice)
            return a.slice(0);
        else{
            var
                b=new Array,
                c=a.length,
                i=0;
            for(; i<c; i++)
                b[i]=a[i];
            return b;
        }
    }

としても同じ結果かも。
そしてこの >>2 が >>0 の求める範囲に収まるのだろう。


しかし、

    a[unescape('%uFF10')]=0;

とかには対応出来ないわけで、完全なクローンを実現する為には、結局

    function cloneArray(a){
        var
            b=new Array,
            p;
        for(p in a)
            b[p]=a[p];
        return b;
    }

とするのが自然であるように思う。効率云々は求めようがない。


5:[完了] 広 [2002/11/03 21:19 ]

意味がやっと分かりました。
new Array()
new Array
Array()
は同じですか。
CopyToみたいなことがしたかったので完了です。ありがとうございました。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World