在n维中添加对象数组的最佳方法是什么?

时间:2017-02-08 01:21:58

标签: javascript arrays object

我想给出两个维度,深度和高度的对象数组,然后创建一个具有这些维度的嵌套数组。底部的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)

https://jsfiddle.net/4yk5b7Lq/

2 个答案:

答案 0 :(得分:2)

您需要在嵌套数组对象结构的最深层保留对该对象的引用。

这样的事情会创建一个长度为y且包含x嵌套num - key个对象的数组。

&#13;
&#13;
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;
&#13;
&#13;

答案 1 :(得分:2)

&#13;
&#13;
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;
&#13;
&#13;

这使用递归来为您提供更易读的解决方案。关键部分从起始深度向下递归,直到达到0。

num部分可以用来为您提供所需的数字范围和精度水平。