首页 > 解决方案 > 如何编写一个创建一定长度对象数组的函数?对象具有自定义生成的数据

问题描述

我有一个随机生成数据的对象:

var obj = {
   price: getRandomNumberRange(10, 200),
   rooms: getRandomNumberRange(1, 5)
   };

在哪里

var getRandomNumberRange = function (min, max) {
  return Math.floor(Math.random() * (max - min) + min);
};

我一直在尝试并未能编写一个函数,该函数将允许创建一个由 4 个对象组成的数组,因此每个对象的数据将在创建时重新生成。我的功能:

var createArr = function () {
   var arr = [];
      for (var i = 0; i < 5; i++) {
      arr.push(obj);
      }
   return arr;
};

换句话说,我希望得到这种数组:

var arr = [{price:40, rooms:2}, {price:23, rooms:4}, {price:99, rooms:2}, {price:191, rooms:3}];

但我不断得到这个:

var arr = [{price:40, rooms:2}, {price:40, rooms:2}, {price:40, rooms:2}, {price:40, rooms:2}];

将感谢您的帮助!

UPD。感谢所有建议更复杂的方法来解决我的问题的人。一旦我在 JS 中取得进展,我将再次重新检查这个线程!

标签: javascriptarraysobject

解决方案


看起来您重复使用该对象来一遍又一遍地推送,并且由于相同的对象,它会推送具有最新值的相同对象引用。

为了克服这个问题,您需要为每个循环创建一个新对象,并使用简写属性分配随机值。

// inside the loop

let price = getRandomNumberRange(10, 200),
    rooms = getRandomNumberRange(1, 5);

array.push({ price, rooms }); // short hand properties

推荐阅读