使用javascript生成一个数值范围为7的倍数的数组

时间:2018-04-08 11:36:39

标签: javascript ecmascript-6

我想用最现代的方式制作像这样的数组

const nextchunk = [];
nextchunk[0] = [0, 6];
nextchunk[1] = [7, 13];

每个nextchunk必须有7个位置,如图所示。这些代表稍后在代码中的限制查询。因此nextchunk[1]取出第7 - 13项,nextchunk[2]得出14 - 20

我希望能够灵活地在运行时调用nextchunk[20]并让它返回正确的值。

3 个答案:

答案 0 :(得分:5)

   function chunks(size) {
     return function getChunk(index) {
       return [size * index, size * (index + 1) - 1];
     }
   }

   const nextchunk = chunks(7);
   console.log(
      nextchunk(0), 
      nextchunk(1), 
      nextchunk(20)
   );

您可以轻松计算出该值。在实际需要之前无需生成它。如果你真的需要这个数组,那么很容易用上层帮助器构建它:

  const nextchunk = Array.from({length: 21}, (_, i) => chunks(7)(i));
  console.log(nextchunk[20]);

答案 1 :(得分:4)

  

我希望能够灵活地致电nextchunk[20]   运行时并让它返回正确的值。

虽然我建议在生产中使用此方法(主要是因为您无法将其转换为在老年js引擎中工作),但您可以实现nextchuck[20]语法使用Proxies

// just for fun
const nextChunk = new Proxy([], {
  get(target, prop) {
    const maybeIndex = parseInt(prop, 10)
    const has = Reflect.has(target, prop)
    const value = Reflect.get(target, prop)
    
    if (has) { 
      return value
    }
    
    if(!Number.isNaN(maybeIndex)) {
      const newValue = [maybeIndex * 7, 6 + maybeIndex * 7]
      Reflect.set(target, prop, newValue );
      
      return newValue;
    }
    
    return value;
  }
});

console.log(nextChunk[0], nextChunk[1], nextChunk[20])
console.log(nextChunk[0] === nextChunk[0])

答案 2 :(得分:2)

您可以创建自定义函数,该函数接受数组和number,并根据您的计算将新元素添加到数组中。

const arr = [];
const nextchunk = (array, chunk) => {
  const start = chunk * 6 + chunk;
  array.push([start, start + 6])
}

nextchunk(arr, 0);
nextchunk(arr, 1);
nextchunk(arr, 2);
nextchunk(arr, 20);

console.log(arr)