用动态数组长度替换硬编码的数字列表

时间:2016-12-25 22:50:03

标签: javascript arrays

我试图找出如何替换值1,2和3 在这个GUI界面中,一系列数字基于数组中有多少个对象,因此它可以动态地跟踪它,而不必在每次更新数组时对其进行硬核处理。 enter image description here

阻止我简单地使用带数字的数组的原因是每个数字都是这个GUI内部的对象。 代码行是这样的。

gui.add(data, 'system', {
  "1": 0,
  "2": 1,
  "3": 2
})

假设我正在使用任何包含任何随机信息的随机数组,如下所示:

var arr = [];
for (var i = 0; i<51;i++){
    arr.push("element");}

这个数组中有51个元素,我想要的是上面包含这些元素的数组用于输出数字&#34; 1&#34;,&#34; 2&#34; ,&#34; 3&#34;,&#34; 4&#34;,&#34; 5&#34;,&#34; 6&#34; (除了10,同时仍然有1个剩余),GUI界面没有打破我。我希望将它除以10的原因是因为我不希望有51个元素可点击,而是6个因为它更易于管理。

我应该做什么或调查什么?谢谢。我的代码的小提琴就是这个。 FIDDLE

编辑:这是一个相对困难的问题,所以我会尝试更清楚。我在这个对象中有数字值1,2,3硬编码:

gui.add(data, 'system', {
  "1": 0,
  "2": 1,
  "3": 2
}).name('system #').onChange(function(value) {
  updateSets(value);
});

但我想要实现的目标是,我不需要写入&#34; 1&#34;,&#34; 2&#34;,&#34; 3&#34;但它看起来是一个数组的长度(如果它包含3个元素),它会将它们写入对象中。但是如果一个数组有51个元素,我不希望在系统对象下有51个数字,但它将它除以10,这样我就有6.不是5,因为我有1个剩余。

1 个答案:

答案 0 :(得分:1)

您可以使用Array.prototype.reduce()创建一个具有相同数量的属性和值的对象到数组的.length

创建一个普通对象。利用Object.entries()for..of循环来设置属性,对象的值直到变量n

您可以使用Array.prototype.slice()从最初创建的对象中获取nx个值的属性。

var arr = [];
for (var i = 0; i < 51; i++) {
  arr.push("element");
}

var obj = arr.reduce(function(obj, element, index) {
  obj[index + 1] = index;
  return obj
}, {});

function getObjProps(from, to, obj, res) {
  let it = void 0;
  if (from) {
    it = Object.entries(obj).slice(from, to);
  } else {
    it = Object.entries(obj);
  }
  for (let [key, value] of it) {
    if (+key <= to) {
      res[key] = value;
    } else {
      break;
    }
  };

  return res
}


var curr = getObjProps(null, 6, obj, {});

console.log(curr);

var next = getObjProps(6, 12, obj, {});

console.log(next);

for (let i = 12; i < arr.length; i += 6) {
  console.log(getObjProps(i, i + 6, obj, {}))
}