2017-02-01 1 views
0

ここに私のコードです。私はそれを少なくとも5回修正し、返される結果は0です。返されるべきである何配列をより小さな配列に分割し、それらを元の配列に戻すことになっている私の関数に何が問題になっていますか?

function chunkArrayInGroups(arr, size) { 
 
    
 
    var array=[]; 
 
    for(var i=0;i<=arr.length;i=i+size){ 
 
    if(i+size<arr.length) array=arr.slice(i,i+size).push(); 
 
    else if(i+size>=arr.length) array=arr.slice(i).push(); 
 
    } 
 
    
 
    return array; 
 
} 
 

 
chunkArrayInGroups(["a", "b", "c", "d"], 2);

[[A、B]、[C、D]]です。

答えて

1

はあなたのコードをより密接に見て:

array=arr.slice(i,i+size).push() 

あなたはarrayarr.slice.pushの結果を代入しています。しかし、push returns the length of the new array。あなたは、おそらく実際にやっているしたいのはarrayにスライスを推進している。

array.push(arr.slice(i,i+size)) 

あなたはその後、最終的な結果は、あなたがチャンクの長さがあることを期待するものである、0ない2である理由を不思議に思うかもしれません。これはあなたが少し遠すぎる反復をしているからです。 i<=arr.lengthi<arr.lengthである必要があります。

function chunkArrayInGroups(arr, size) { 
 
    var array=[]; 
 
    for (var i = 0; i < arr.length; i = i + size) { 
 
    if (i + size < arr.length) array.push(arr.slice(i, i + size)); 
 
    else if (i + size >= arr.length) array.push(arr.slice(i)); 
 
    } 
 
    
 
    return array; 
 
} 
 

 
console.log(chunkArrayInGroups(["a", "b", "c", "d"], 2));

+0

それを愛します。これはまったく新しいコードを与えるだけの唯一の答えです。 – user132522

+0

MDNをもう一度読んでプッシュの知識を更新する必要があります。 – user132522

+0

私のアルゴリズムを辿るには時間がかかるはずです。私は自分の厄介なものを見ていたいとは思っていません。 – user132522

1

チャンクを構築する方が簡単... ​​

function chunkArrayInGroups(arr, size) { 
 
    
 
    var array=[]; 
 
    var chunk =[] 
 
    for(var i=0; i<arr.length; i++){ 
 
    if(chunk.length == size) chunk =[] 
 
    if(i%size == 0) array.push(chunk)   
 
    chunk.push(arr[i]);   
 
    }  
 
    return array; 
 
} 
 

 
console.log(chunkArrayInGroups(["a", "b", "c", "d"], 2));

1

function chunkArrayInGroups(arr, size) { 
 
    var len = arr.length; 
 
    
 
    // the number of expected subarrays 
 
    var count = (len % size == 0)? len/size: Math.floor(len/size) + 1; 
 
    
 
    var array = [] 
 
    for(var i = 0; i < count; i++) 
 
    // get the propper sub array (slice do check for boundaries so no need to check it ourselves) 
 
    array.push(arr.slice(i * size, (i + 1) * size)); 
 
    
 
    return array; 
 
} 
 

 
console.log(chunkArrayInGroups(["a", "b", "c", "d", "e"], 2));

関連する問題