簡體   English   中英

從數組中提取“N”值

[英]Extract “N” Values from an Array

目的

“Chunky Monkey”問題:從給定數組('arr')和數字('size')創建一個新的多維數組。 新的多維數組應該創建等於'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']];


我的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()等,但無濟於事。 我的所有方法都會導致在數組中循環,但不會“匹配它們”。
  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;
}

您可以使用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;
};

演示

這是我的解決方案。 如果輸入數組不是size倍數,則result中的最后一個組將包含其余項

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

JSFiddle演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM