javascript - 在 Javascript 中根据步长分割整数数组

标签 javascript arrays math logic

我编写了一段代码,根据步长大小将整数数组拆分为子数组(如果步长大小为空,它还应该包括在内)。我确信我的逻辑效率不高,如果有人有更好的解决方案请帮助我。

var range = [10, 20, 20, 30, 100, 1000, 3420, 1124, 430, 700, 800,
  35, 39, 12, 5046
]
var rangeSplit = [];

var max = Math.max.apply(null, range);

var bucketSize = max / 25;
var tempArr = []
var tempBucket = 0;
while (tempBucket < max) {
  rangeSplit[bucketSize + tempBucket] = [];
  tempBucket += bucketSize;
}
for (var i = 0; i < range.length; i++) {
  var bucket = Math.ceil(range[i] / bucketSize)
  if (rangeSplit[bucketSize * bucket] == undefined) {
    rangeSplit[bucketSize * bucket] = [];
  }
  rangeSplit[bucketSize * bucket].push(range[i])
}

console.log(rangeSplit)

最佳答案

我不确定你的意思是“如果步长为空,它还应该包括”,如果你的意思是如果步长为空,它应该返回原始数组,你可以将该条件放在开头函数,如 if range === ''{ return arr; }

我把它写成一个函数,这样它会更通用,其中arr是你想要切片的数组,range是步长的大小

    function chunkArrayInGroups(arr, range) {
     var aux = []; //the output

     for (var i = 0; i < (arr.length/range); i++){ // (arr.length/size) is the 
                                                 //number of chunks

      if ((size*i)%i === 0 || i === 0){ 
        aux.push(arr.slice((range*i), (range*(i+1))));
      }
     }
    return aux;
    }

//Try it like 
chunkArrayInGroups([0, 1, 2, 3, 4, 5], 2);

请记住,数组是从零开始的对象,因此您需要考虑 0,这就是我在 if 语句中使用条件 if i==0 的原因。

Slice function返回数组的一 block ......并且它需要一个范围,就像函数一样。我希望这就是您正在寻找的东西。

关于javascript - 在 Javascript 中根据步长分割整数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35280726/

相关文章:

javascript - 重新加载已删除的列表项

c++ - 数组的前一行元素也得到更新

python - 导入自己的数据,例如 MNIST 或 CIFAR10 load_data()

arrays - 在 Swift 中, append 数组的效率如何?

c++ - 熵和并行随机数生成器播种

c++ - 地形碰撞问题

javascript - 使用 AngularJS,如何仅当值不在数组中时才显示元素?

javascript - 在导出的组件中使用 “ElementRef” 时出错

javascript - 传递参数时 AJAX setTimeout 不起作用

arrays - 如何在满足以下约束的 n 个元素的数组中分配随机值?