我想给出两个维度,深度和高度的对象数组,然后创建一个具有这些维度的嵌套数组。底部的desiredArr
将是4 X 2的示例。
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)
答案 0 :(得分:2)
您需要在嵌套数组对象结构的最深层保留对该对象的引用。
这样的事情会创建一个长度为y
且包含x
嵌套num
- key
个对象的数组。
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);
&#13;
答案 1 :(得分: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);
&#13;
这使用递归来为您提供更易读的解决方案。关键部分从起始深度向下递归,直到达到0。
num
部分可以用来为您提供所需的数字范围和精度水平。