如何在 JavaScript 中将一个数字拆分为最多 100 个的块?

Jac*_*her 3 javascript arrays integer split

我有一个数字(比方说 525)。我想把这个数字分成一个块数组,每个值最多 100 个。如果我把525它拆分成一个数组,它看起来像:

[
    100,
    100,
    100,
    100,
    100,
    25
]
Run Code Online (Sandbox Code Playgroud)

这是我迄今为止尝试过的:

var number = 525;
var array = [];
while (number > 0) {
    number = number - 100;
    array.push(Math.min(number, 100));
}
Run Code Online (Sandbox Code Playgroud)

那不会让我走远。它只是返回[ 100, 100, 100, 100, 25, -75 ]。我知道使用while不是最好的方法,但这是我能想到的。有没有人有其他方法可以改进我的代码并提高效率?

Hun*_*len 6

您可以计算出number可整除的次数,100然后以编程方式创建该长度的数组:

var number = 525;
var array = new Array(Math.floor(number / 100)).fill(100).concat(number % 100))
// [ 100, 100, 100, 100, 100, 25 ]
Run Code Online (Sandbox Code Playgroud)

您可以将其扩展为任意数量的块:

function chunkBy(number, n) {
  var chunks = Array(Math.floor(number / n)).fill(n);
  var remainder = number % n;

  if (remainder > 0) {
    chunks.append(remainder);
  }
  return chunks;
}
Run Code Online (Sandbox Code Playgroud)

或者,只需在执行减法之前推动元素:

var number = 525;
var array = [];
while (number > 0) {
    array.push(Math.min(number, 100));
    number = number - 100;
}
// [ 100, 100, 100, 100, 100, 25 ]
Run Code Online (Sandbox Code Playgroud)

使用带有箭头函数的 ES6:

const chunkBy = (n) => number => {
  var chunks = new Array(Math.floor(number / n)).fill(n);
  var remainder = number % n;
  console.log('CHUNKS = ', chunks);
  if (remainder > 0) {
    chunks.push(remainder);
  }

  return chunks;
};

const chunkBy50 = chunkBy(50);
const chunkBy100 = chunkBy(100);
const chunkBy77 = chunkBy(77);
console.log(chunkBy50(500));
// [ 50, 50, 50, 50, 50, 50, 50, 50, 50, 50 ]
console.log(chunkBy100(500));
// [ 100, 100, 100, 100, 100 ]
console.log(chunkBy77(500));
// [ 77, 77, 77, 77, 77, 77, 38 ]
Run Code Online (Sandbox Code Playgroud)