提取" N"数组

时间:2015-05-13 22:05:12

标签: javascript

目的

" Chunky Monkey"问题:从给定数组(' arr')和数字(' size')创建一个新的多维数组。新的多维数组应该创建等于'大小的数组长度。变量

示例#1

chunk(['a', 'b', 'c', 'd'], 2);
var answer = [];
function chunk(arr,size){
//do something
};

return answer

预期回答#1

answer = [['a','b'],['c','d']];

示例#2

下面是一个奇数个元素/大小的例子 - 在这种情况下,预期的结果是有一个"余数"基。

chunk(['a', 'b', 'c', 'd'], 3);
    var answer = [];
    function chunk(arr,size){
    //do something
    };

    return answer

预期回答#2

answer = [['a','b','c'],['d']];

MY PSEUDO-CODE / APPROACH

var final = [];
function chunk(arr, size) {
  //extract number of elements from 'arr' = 'size' 
  var extract = function{
    //HELP! [INSERT LOGIC]
  };

  //add extracted elements to 'group' array
  var group = [extract];

  //push 'group' to 'final' array for multidimensional array
  final.push(group);

  //return final'
  return final;
}

chunk(['a', 'b', 'c', 'd'], 2);

问题

  1. 我一直在寻找@ .forEach(),for(in)循环,.slice()等,但无济于事。我的所有方法都会导致在阵列中循环,但不会将它们配对#34;。
  2. 我过于复杂了吗?是否有比我的伪代码/方法更直接的方法?

3 个答案:

答案 0 :(得分:2)

您可以使用递归函数:

function chunk(arr, size) {
    if(!arr.length) return [];
    return [arr.slice(0, size)].concat(chunk(arr.slice(size), size));
}

或循环:

function chunk(arr, size) {
    arr = arr.slice();
    var ret = [];
    while(arr.length) ret.push(arr.splice(0, size));
    return ret;
}

答案 1 :(得分:1)

您可以使用slice来获取数据块。

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

请参阅demo

答案 2 :(得分:0)

这是我的解决方案。如果输入数组不是function chunk(arr, size) { var arr_size = arr.length, no_groups = arr_size/size, i, final = []; if (no_groups == 0){ return arr; } for(i=0;i<no_groups;i++){ final.push(arr.splice(0, size )); } return final; } 的倍数,则结果中的最后一个组将包含剩余项

(Interval, BusinessID)

JSFiddle demo