Логика программирования для циклов - PullRequest
0 голосов
/ 18 марта 2012

У меня есть следующие цифры: 1,2,3,4,5,6,7,8,9,10,11,12 ...

У меня есть число n, скажем n=2, тогда я хочу, чтобы массивы были разделены на эти многие числа, то есть:

For `n=2`
Result array : 1,2, 5,6, 9,10, 13,14, ... <br />
Result array 2 : 3,4, 7,8, 11,12 ...

For `n=3`
Result array : 1,2,3, 7,8,9, ... <br />
Result array 2 : 4,5,6, 10,11,12...

Я не могу понять даже логику для этого.
Я пытался найти что-то похожее в Google, но не смог его найти.
Пожалуйста, помогите.

Ответы [ 3 ]

4 голосов
/ 18 марта 2012

Не совсем понятно, как вы хотите разделить выходные данные по частям между двумя массивами, но вы можете получить большую часть пути, используя ядро ​​JavaScript Массив slice() метод :

function chunk(arr, n) {
  var a=[], i;
  for (i=0; i<arr.length; i += n) {
    a.push(arr.slice(i, i+n));
  }
  return a;
}

var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
chunk(a, 2) # => [[1,2], [3,4], [5,6], [7,8], [9,10], [11,12]]
chunk(a, 3) # => [[1,2,3], [4,5,6], [7,8,9], [10,11,12]]
chunk(a, 5) # => [[1,2,3,4,5], [6,7,8,9,10], [11,12]]

Вот как вы можете поместить эти результаты в два массива, точно по вашему вопросу:

function chunk2(arr, n) {
  var a1=[], a2=[], a=a1, len=arr.length, i;
  for (i=0; i<len; i+=n, a=(a===a1?a2:a1)) {
    a.push(arr.slice(i, i+n));
  }
  return [a1, a2];
}
var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
var x = chunk2(a, 2);
x[0]; // => [[1,2], [5,6], [9,10]]
x[1]; // => [[3,4], [7,8], [11,12]]
x = chunk2(a, 3);
x[0]; // => [[1,2,3], [7,8,9]]
x[1]; // => [[4,5,6], [10,11,12]]
2 голосов
/ 18 марта 2012
function array_chunk (input, size, preserve_keys) {
    // Split array into chunks  
    // 
    // version: 1109.2015
    // discuss at: http://phpjs.org/functions/array_chunk
    // +   original by: Carlos R. L. Rodrigues (http://www.jsfromhell.com)
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // %        note 1: Important note: Per the ECMAScript specification, objects may not always iterate in a predictable order
    // *     example 1: array_chunk(['Kevin', 'van', 'Zonneveld'], 2);
    // *     returns 1: [['Kevin', 'van'], ['Zonneveld']]
    // *     example 2: array_chunk(['Kevin', 'van', 'Zonneveld'], 2, true);
    // *     returns 2: [{0:'Kevin', 1:'van'}, {2: 'Zonneveld'}]
    // *     example 3: array_chunk({1:'Kevin', 2:'van', 3:'Zonneveld'}, 2);
    // *     returns 3: [['Kevin', 'van'], ['Zonneveld']]
    // *     example 4: array_chunk({1:'Kevin', 2:'van', 3:'Zonneveld'}, 2, true);
    // *     returns 4: [{1: 'Kevin', 2: 'van'}, {3: 'Zonneveld'}]

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

Взято из здесь .Который был одним из первых результатов при поиске фрагментов массива javascript .

0 голосов
/ 18 марта 2012

Вы можете разделить элементы на два массива следующим образом:

function chunk(arr, cnt) {
  var result = [[],[]];
  for (var i = 0; i < arr.length; i++) result[Math.floor(i / cnt) % 2].push(arr[i]);
  return result;
}

Демо: http://jsfiddle.net/Guffa/t7agt/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...