2012-09-26 48 views
1

我正试图将更大的数组分解为更小的块。将数组分解为块

下面是一个例子:

var data = [ { number: '184805871' }, 
    { number: '3418400730' }, 
    { number: '2047901973' }, 
    { number: '5038880529' }, 
    { number: '5040293507' }, 
    { number: '5044243187' }, 
    { number: '5078304520' }, 
    { number: '5085466763' }, 
    { number: '5145133307' }, 
    { number: '5197540781' }, 
    { number: '5199065039' }, 
    { number: '5208120208' }, 
    { number: '5212123861' }, 
    { number: '5212383329' }, 
    { number: '5214353364' }, 
    { number: '5229836037' } 
    ]; 

我的阵列比这更长的时间,这只是一个例子。所以我familar与PHP的array_chunk功能,并发现它在php.js

function array_chunk (input, size, preserve_keys) { 

    var x, p = '', i = 0, c = -1, l = input.length || 0, n = []; 

    if (size < 1) { 
     return null; 
    } 

    if (Object.prototype.toString.call(input) === '[object Array]') { 
     if (preserve_keys) { 
      while (i < l) { 
       (x = i % size) ? n[c][i] = input[i] : n[++c] = {}, n[c][i] = input[i]; 
       i++; 
      } 
     } 
     else { 
      while (i < l) { 
       (x = i % size) ? n[c][x] = input[i] : n[++c] = [input[i]]; 
       i++; 
      } 
     } 
    } 
    else { 
     if (preserve_keys) { 
      for (p in input) { 
       if (input.hasOwnProperty(p)) { 
        (x = i % size) ? n[c][p] = input[p] : n[++c] = {}, n[c][p] = input[p]; 
        i++; 
       } 
      } 
     } 
     else { 
      for (p in input) { 
       if (input.hasOwnProperty(p)) { 
        (x = i % size) ? n[c][x] = input[p] : n[++c] = [input[p]]; 
        i++; 
       } 
      } 
     } 
    } 
    return n; 
} 

是否有更简单的方法来做到这一点比?

这里是我的代码:

var chunks = array_chunk(data, 3); 

jQuery.each(chunks, function(index, value) { 
    console.log(index + ': ' + value); 
}); 

我怎样才能从数价值CONSOLE.LOG而不是[对象]我尝试值[0]等,但它不工作..

对于每个阵列分成3每个数组,我需要从数组中获取索引和值。

我该怎么做?

+0

问题是块是3个数组,所以你仍然需要另一个foreach块的foreach。 http://jsfiddle.net/a4ntM/ – Mark

+0

可能重复[拆分数组成块](http://stackoverflow.com/questions/8495687/split-array-into-chunks) – Mogsdad

回答

1

因为你的问题对我来说还不清楚,你知道你可以很容易地在slice任何数组在javascript中?

“采取数据阵列,并将其与每个阵列只有3个数字分成单独的数组”:

var chunks = []; 
for (var i=0; i<data.length;) { 
    chunks.push(data.slice(i, i+=3)); 
} 

“去通每个阵列和得到的每个值与索引一起为阵”:

for (var i=0; i<chunks.length; i++) { // iter among chunks 
    for (var j=0; j<chunks[i].length; j++) { // iter in chunk 
     console.log(j, chunks[i][j].number); // show item j of the chunk number i 
    } 
} 

编辑:

,如果你婉t显示

... 
12 ["5212123861", "5212383329", "5214353364"] 
13 ["5212123861", "5212383329", "5214353364"] 
14 ["5212123861", "5212383329", "5214353364"] 
15 ["5229836037"] 

可能迭代这样的:

for (var i=0; i<chunks.length; i++) { 
    for (var j=0; j<chunks[i].length; j++) { 
     console.log(i*3+j, chunks[i].map(function(v){return v.number})); 
    } 
} 
+0

是的,我试过,但我得到'undefined' – jordan

+0

我会尝试更好地解释 - 我想要将数据数组分割成单独的数组,每个数组只有3个数字。然后我想穿过每个数组并获取每个数组的值以及数组的索引。 – jordan

+0

感谢您的回应,我试过你的代码,通过每个数组来获取值,但输出是0号码,1号码,0号码等 - 说它分成50个不同的片段,我希望它显示0 - 1,2,3,4,5,6等/ 1 - 1,2,3,4,5,6 /每个部分的所有数字。你是否理解或需要澄清更好? – jordan

0

array.slice方法可以从开始,中间,或自己需要的任何目的的阵列的端部提取的切片。

var i,j,temparray,chunk = 10; 
for (i=0,j=data.length; i<j; i+=chunk) { 
    temparray = data.slice(i,i+chunk); 
    // do whatever 
}