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
不是最好的方法,但这是我能想到的。有没有人有其他方法可以改进我的代码并提高效率?
您可以计算出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)
归档时间: |
|
查看次数: |
2482 次 |
最近记录: |