0

3D 配列を取得しましたが、その別のコピーを別の配列に作成したいと考えています。

直接割り当てると、3D 配列ではなく新しい配列に文字列が返されます。

foo = [] //3D array; 
boo = foo //boo becomes a string

これを行う方法のアイデアはありますか?

編集:これはコードです

Background.js

function onRequest(request, sender, sendResponse) {
localStorage = request.mes; // mes is an array
}; 
chrome.extension.onMessage.addListener(onRequest);
4

2 に答える 2

0

おそらくcloneを使用するでしょう。これを試してください。

var a = [1,2,[3,4,[5,6]]];

Array.prototype.clone = function() {
    var arr = [];
    for( var i = 0; i < this.length; i++ ) {
//      if( this[i].constructor == this.constructor ) {
        if( this[i].clone ) {
            //recursion
            arr[i] = this[i].clone();
            break;
        }
        arr[i] = this[i];
    }
    return arr;
}

var b = a.clone()

console.log(a);
console.log(b);

b[2][0] = 'a';

console.log(a);
console.log(b);
于 2012-08-14T09:21:11.577 に答える
0

私が見つけた解決策は、jQuery の使用に依存していますが、問題にならないことを願っています。

var a1 = ['test', ['a','b',1], [[1,2,3],[4,5,6]]];
console.log(a1);
var a2 = jQuery.extend(true, {}, a1);
a1[0] = 'test - changed';
console.log(a1);
console.log(a2);

フィドル: http://jsfiddle.net/gRoberts/AhKNx/

単純に設定var a2 = a1;すると、元のオブジェクトへの参照が作成され、結果としてa2[0]に変更されtest - changedます。

コンソール (Firefox/Chrome では F12) を見て、私のフィドルからの出力を確認してください ;)

それが役立つことを願っていますか?

ギャビン

于 2012-08-14T09:25:18.720 に答える