2017-02-08 8 views
0

オブジェクトの配列に奥行きと高さの2つの次元を与え、それらの次元を持つ入れ子配列を作成したいとします。下部のdesiredArrn次元のオブジェクト配列に追加し続ける最善の方法は何ですか?

var x = 4; 
var y = 2; 
var arr = [{ 
       "key":[], 
       "num":Math.random() 
}, //etc...]; 

for(var m=0; m<y; m++){ 
    for(var n=0; n<x; n++){ 
    //I want something like the following: 
    //arr[0][key][1][key][m].push(...) ? 
    arr[0]['key'].push({ 
     "key":[], 
     "num":Math.random() 
    }); 

    } 
} 
console.log(arr) 



var desiredArr = [ 
    { 
    'num':3, 
    'key':[{ 
    'num':3.4, 
    'key':[{ 
     'num':2.3, 
     'key':[{ 
     'num':1.3, 
     'key':[{}] 
     }] 
    }] 
    }] 
    },{ 
    'num':5, 
    'key':[{ 
    'num':2.4, 
    'key':[{ 
     'num':1.3, 
     'key':[{ 
     'num':5.3, 
     'key':[{}] 
     }] 
    }] 
    }] 
    } 
] 
console.log(desiredArr) 

https://jsfiddle.net/4yk5b7Lq/

答えて

2

var depth = 4; 
 
var dim = 2; 
 

 
function build(curDepth) { 
 
    if (curDepth <= 0) return {}; 
 
    return { 
 
    num: Math.random(), 
 
    key: [ build(curDepth -1) ] 
 
    }; 
 
} 
 

 
var nestedObj = []; 
 
for(var i = 0; i < dim; i++) { 
 
    nestedObj.push(build(depth)); 
 
} 
 
console.log(nestedObj);

これは、あなたより読みやすいソリューションを提供するために再帰を使用しています。キー部分は、開始深度から0に達するまで繰り返されます。

num部分は、もちろん数字の範囲と精度のレベルを与えるために考慮に入れることができます。

2

あなたのネストされた配列オブジェクト構造の最も深いレベルでのオブジェクトへの参照を保持する必要があるだろう4 X 2の例だろう。

このようなものは、長さyの配列を作成し、xのネストされたのオブジェクトを作成します。

var arr = [], 
 
    x = 4, 
 
    y = 2, 
 
    obj, 
 
    tmpObj; 
 

 
for (var i = 0; i < y; i++) { 
 
    obj = {}; 
 
    arr.push(obj); 
 
    for (var j = 0; j < x; j++) { 
 
    obj.num = Math.random(); 
 
    obj.key = []; 
 
    tmpObj = {}; 
 
    obj.key.push(tmpObj); 
 
    obj = tmpObj; 
 
    } 
 
} 
 

 
console.log(arr);

関連する問題