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