在数组中循环以在Javascript中创建对象

在数组中循环以在Javascript中创建对象,javascript,arrays,Javascript,Arrays,我想编写一个采用数组的函数,例如: var columns = ['distance', 'times', 'acceleration'] 然后从这个数组中,我想生成如下内容: [{id: id_0, distance: 0, times: 0, acceleration: 0}, {id: id_1, distance: 1, times: 1, acceleration: 1}] 请注意,这里有两个对象,但我希望它是我传入参数的任何数字。以下是我所拥有的: generateData: f

我想编写一个采用数组的函数,例如:

var columns = ['distance', 'times', 'acceleration']
然后从这个数组中,我想生成如下内容:

[{id: id_0, distance: 0, times: 0, acceleration: 0}, {id: id_1, distance: 1, times: 1, acceleration: 1}]
请注意,这里有两个对象,但我希望它是我传入参数的任何数字。以下是我所拥有的:

generateData: function(rows, columns) {
  var generatedData = [];
  for (var i = 0, rowLen = rows.length; i < rowLen; i++) {
    for (var n = 0; i < columns.length; n++) {
      // not sure how to construct an object here from looping through my columns array
      generatedData.push({
      id: 'id_ + n',
      // confused here
      });
    }
  return generatedData;
  }
}
generateData:function(行、列){
var generatedData=[];
对于(var i=0,rowLen=rows.length;i
我将向您提供初始的非优化解决方案。由您来进行优化

generateData: function(rows, columns) {
  var generatedData = [];
  for (var i = 0; i < rows.length; i++) {
      var myObj = {};
      myObj["id_" + i] = i;
      for (var n = 0; n < columns.length; n++) {
          myObj[columns[n]] = i;
      }
      generatedData.push(myObj);
  }
  return generatedData;
}
generateData:function(行、列){
var generatedData=[];
对于(变量i=0;i
我将向您提供初始的非优化解决方案。由您来进行优化

generateData: function(rows, columns) {
  var generatedData = [];
  for (var i = 0; i < rows.length; i++) {
      var myObj = {};
      myObj["id_" + i] = i;
      for (var n = 0; n < columns.length; n++) {
          myObj[columns[n]] = i;
      }
      generatedData.push(myObj);
  }
  return generatedData;
}
generateData:function(行、列){
var generatedData=[];
对于(变量i=0;i
从传入数组中获取对象属性的函数方法,而不是对它们进行硬编码,在for循环中可能类似这样,以使用来自名为“cols”的数组的值的属性名称填充名为“rows”的数组:

cols.forEach(function(cv, ci, ca) { rows[ri][cv] = ri; });
有关完整示例,请参见代码段。注意,在本例中,我只是将当前的“行”索引作为属性值推送到对象中

var columns=[“距离”、“时间”、“加速度”];
函数生成数据(numRows,cols){
行=新数组(numRows);
对于(ri=0;ri控制台日志(数据)从传入数组中获取对象属性的函数方法,而不是硬编码它们,在for循环中可能类似于这样,以使用来自名为“cols”的数组的值的属性名称填充名为“rows”的数组:

cols.forEach(function(cv, ci, ca) { rows[ri][cv] = ri; });
有关完整示例,请参见代码段。注意,在本例中,我只是将当前的“行”索引作为属性值推送到对象中

var columns=[“距离”、“时间”、“加速度”];
函数生成数据(numRows,cols){
行=新数组(numRows);
对于(ri=0;ri控制台日志(数据)这是动态创建您自己的函数的完美地方。试试这个:

function createArrayOfObjects(columns, count) {
  var objectProps = new Array(columns.length);
  for (var i = 0; i < columns.length; i++){
    //":j" will be the variable j inside the dynamic function
    objectProps[i] = columns[i] + ":j";
  }

  var funcBody = "var arr = new Array(count);" +
      "for(var j = 0; j < count; j++){" +
          "arr[j] = {" + objectProps.join(',') + "};" +
      "}" +
      "return arr;";

  //Create a new function and call it with count as the parameter, returning the results
  return new Function("count", funcBody)(count);
}

var count = 10;
var columns = ['distance', 'times', 'acceleration'];

createArrayOfObjects(columns.concat('id'), count);
函数createArrayOfObjects(列,计数){
var objectProps=新数组(columns.length);
对于(var i=0;i
这样做的好处是,当其他解决方案需要嵌套循环时,只需在列数组上循环一次


这是动态创建您自己的函数的完美地方。试试这个:

function createArrayOfObjects(columns, count) {
  var objectProps = new Array(columns.length);
  for (var i = 0; i < columns.length; i++){
    //":j" will be the variable j inside the dynamic function
    objectProps[i] = columns[i] + ":j";
  }

  var funcBody = "var arr = new Array(count);" +
      "for(var j = 0; j < count; j++){" +
          "arr[j] = {" + objectProps.join(',') + "};" +
      "}" +
      "return arr;";

  //Create a new function and call it with count as the parameter, returning the results
  return new Function("count", funcBody)(count);
}

var count = 10;
var columns = ['distance', 'times', 'acceleration'];

createArrayOfObjects(columns.concat('id'), count);
函数createArrayOfObjects(列,计数){
var objectProps=新数组(columns.length);
对于(var i=0;i
这样做的好处是,当其他解决方案需要嵌套循环时,只需在列数组上循环一次


你在说什么优化?@Bergi请看我的优化版本。你在说什么优化版本?@Bergi请看我的优化版本。嗯,上次我测试这种方法时,没有证明它快很多。然而,它似乎在这里起作用+1表示努力,但我认为OP没有必要,他应该使用普通(短)解决方案。@Bergi,我认为这个解决方案(10行代码,或6行代码,取决于您如何计算funcBody字符串)与普通解决方案(10行代码)长度相同哦,没错,我从你片段的外观判断错了。但是,处理代码字符串仍然很容易出错,例如,如果
不是有效的标识符名称,您的代码将失败。嗯,上次我测试这种方法时,没有证明它会快很多。然而,它似乎在这里起作用+1,但我认为OP没有必要,他应该使用简单的解决方案。@Bergi,我认为这是