Javascript 为什么会返回[&"x27;a&"x27;、&"x27;b&"x27;],而不是[&&&"x27;a&&"x27;、&"x27;b&&"x27;]、[&&"x27;c&&"x27;、&&"d&"?
我在做freecodecamp的篝火:矮胖的猴子。我几乎找到了解决方案,但我不明白为什么它不起作用。所以我的问题是:“为什么这个返回[['a','b']],而不是[['a','b'],['c','d']Javascript 为什么会返回[&"x27;a&"x27;、&"x27;b&"x27;],而不是[&&&"x27;a&&"x27;、&"x27;b&&"x27;]、[&&"x27;c&&"x27;、&&"d&"?,javascript,arrays,Javascript,Arrays,我在做freecodecamp的篝火:矮胖的猴子。我几乎找到了解决方案,但我不明白为什么它不起作用。所以我的问题是:“为什么这个返回[['a','b']],而不是[['a','b'],['c','d'] function chunk(arr, size) { var array = []; var tmp = []; for(var i = 0; i < Math.floor(arr.length/size); i++) { for(var j = 0; j <
function chunk(arr, size) {
var array = [];
var tmp = [];
for(var i = 0; i < Math.floor(arr.length/size); i++)
{
for(var j = 0; j < size; j++)
{
tmp.push(arr[j]);
}
array.push(tmp);
tmp = [];
arr.splice(0,size);
}
return array;
}
chunk(['a', 'b', 'c', 'd'], 2);
功能块(arr,大小){
var数组=[];
var tmp=[];
对于(变量i=0;i
因为您正在更改循环内arr
的长度。因此,外部循环只运行一次。您需要在更改它之前缓存它:
function chunk(arr, size) {
var array = [];
var tmp = [];
// save this, otherwise the 2nd iteration will not run at all
// because the new array length will be 2, making half of that 1
var iter = Math.floor(arr.length / size);
for (var i = 0; i < iter; i++) {
for (var j = 0; j < size; j++) {
tmp.push(arr[j]);
}
array.push(tmp);
tmp = [];
arr.splice(0, size);
}
return array;
}
功能块(arr,大小){
var数组=[];
var tmp=[];
//保存这个,否则第二次迭代根本不会运行
//因为新的数组长度是2,等于1的一半
var iter=数学地板(长度/尺寸);
对于(var i=0;i
因为您正在更改循环内arr
的长度。因此,外部循环只运行一次。您需要在更改它之前缓存它:
function chunk(arr, size) {
var array = [];
var tmp = [];
// save this, otherwise the 2nd iteration will not run at all
// because the new array length will be 2, making half of that 1
var iter = Math.floor(arr.length / size);
for (var i = 0; i < iter; i++) {
for (var j = 0; j < size; j++) {
tmp.push(arr[j]);
}
array.push(tmp);
tmp = [];
arr.splice(0, size);
}
return array;
}
功能块(arr,大小){
var数组=[];
var tmp=[];
//保存这个,否则第二次迭代根本不会运行
//因为新的数组长度是2,等于1的一半
var iter=数学地板(长度/尺寸);
对于(var i=0;i
您正在修改每次迭代的arr
长度,以防止其第二次执行。此外,一个循环就足够了
功能块(arr,大小){
var数组=[];
对于(变量i=0;i 块(['a','b','c','d'],2);
您在每次迭代中修改arr
的长度,以防止其第二次执行。此外,一个循环就足够了
功能块(arr,大小){
var数组=[];
对于(变量i=0;i 块(['a','b','c','d'],2);
带有循环的可配置块大小示例
功能块(arr,chunkSize){
var数组=[];
对于(var index=0,arrLen;index=chunkSize){
数组[index]=arr.splice(0,chunkSize==1?arrLen:chunkSize);
}否则如果(arrLen>0){
阵列[索引]=阵列拼接(0,阵列);
}
}
返回数组;
}
var result=chunk(['a','b','c','d'],1);
console.log(result);
带有循环的可配置块大小示例
功能块(arr,chunkSize){
var数组=[];
对于(var index=0,arrLen;index=chunkSize){
数组[index]=arr.splice(0,chunkSize==1?arrLen:chunkSize);
}否则如果(arrLen>0){
阵列[索引]=阵列拼接(0,阵列);
}
}
返回数组;
}
var result=chunk(['a','b','c','d'],1);
console.log(结果);
另一种方法:
function chunk(arr, size) {
var array = [];
var tmp = [];
var aux = 0;
for(var i = 0; i < Math.ceil(arr.length/size); i++)
{
for(var j = aux; j < aux + size; j++)
{
arr[j] != undefined?tmp.push(arr[j]):false;
}
aux = aux + size;
array.push(tmp);
tmp = [];
}
return array;
}
console.log(chunk(['a', 'b', 'c', 'd', 'e', 'f'], 2));
功能块(arr,大小){
var数组=[];
var tmp=[];
var-aux=0;
对于(变量i=0;i
PS:它适用于数组中的偶数和奇数个元素。另一种方法:
function chunk(arr, size) {
var array = [];
var tmp = [];
var aux = 0;
for(var i = 0; i < Math.ceil(arr.length/size); i++)
{
for(var j = aux; j < aux + size; j++)
{
arr[j] != undefined?tmp.push(arr[j]):false;
}
aux = aux + size;
array.push(tmp);
tmp = [];
}
return array;
}
console.log(chunk(['a', 'b', 'c', 'd', 'e', 'f'], 2));
功能块(arr,大小){
var数组=[];
var tmp=[];
var-aux=0;
对于(变量i=0;i
PS:它适用于数组中的偶数和奇数个元素。有很多关于工作代码的答案,所以我只回答为什么 您认为外部循环会重复两次,因为
Math.floor(arr.length/size)
在开始时是2
:
for(var i = 0; i < Math.floor(arr.length/size); i++) {
// ....
}
对于第二次迭代,
i
变为1
,Math.floor(arr.length/size)
实际上是Math.floor(['c','d']/2)
,检查失败,循环退出。因此没有第二次迭代。很多答案都是工作代码,所以我只是回答为什么
您认为外部循环会重复两次,因为Math.floor(arr.length/size)
在开始时是2
:
for(var i = 0; i < Math.floor(arr.length/size); i++) {
// ....
}
对于第二次迭代,
i
变为1
,而Math.floor(arr.length/size)
实际上是Math.floor(['c','d']/2)
,检查失败,循环退出。因此没有第二次迭代。因为只有一个tmp
。你的意思是['a','b',['c','d']?@HashPsi在第一个循环中移动tmp并不能修复它。只是为了好玩:只是为了好玩v2:因为只有一个tmp
。你是说[['a','b',['c','d']]?@HashPsi在第一个循环中移动tmp并不能修复它。只是为了好玩:只是为了好玩v2:请解释下一票。请解释下一票。您不需要条件,a