jquery 将数组拆分为块

oxcyiej7  于 2023-10-17  发布在  jQuery
关注(0)|答案(3)|浏览(123)

我正在尝试将一个较大的数组分解为较小的块。
下面是一个示例:

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' }
  ];

我的数组比这个长得多,这只是一个例子。所以我熟悉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); 
});

如何将number中的值取到console.log而不是[Object]中?我尝试了value[0]等,但它不工作。
对于每个数组,每个数组分为3个,我需要从数组中获取索引和值。
我该怎么做?

wpcxdonn

wpcxdonn1#

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
}
kgqe7b3p

kgqe7b3p2#

function array_chunk(array, chunkSize) {
    if (!array.length || chunkSize < 1) return [];

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

    return chunks;
}

var data = [1, 2, 3, 4, 5, 6, 7, 8, 9];
console.log(array_chunk(data, 3)); // [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
r6l8ljro

r6l8ljro3#

由于你的问题我不清楚,你知道你可以很容易地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
   }
}

编辑:
如果要显示

...
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})); 
   }
}

相关问题