将数组 ["banana"、"apple"、"orange"、.....等] 拆分为基于其他数组的组,即。 [2,7,3]

Split array ["banana", "apple", "orange", .....etc ] into groups based on other array, ie. [2,7,3]

我有一堆数组,我需要根据另一个匹配数组中的数字将它们分成更小的组。示例:

var myArray1 = ["banana", "apple", "orange", "pear", "pineapple", "grapes", "apricot", "plum"];
var splitArray1 = [3,2,2,1];

我想要一个函数 return 4 个子数组:

[["banana", "apple", "orange"], ["pear", "pineapple"], ["grapes", "apricot"], ["plum"]];

我找到了这段代码,它显然是用来做这个的,但它 return 是完整的数组:

function chunkArray(array, size) {
    var chunked_arr = [];
    for (var i = 0; i < array.length; i++) {
      var last = chunked_arr[chunked_arr.length - 1];
      if (!last || last.length === size) {
        chunked_arr.push([array[i]]);
      } else {
        last.push(array[i]);
      }
    }
    return chunked_arr;
}

这在 google 应用程序脚本中,如果它有所不同。

您可以使用Array.splice()

var myArray1 = ["banana", "apple", "orange", "pear", "pineapple", "grapes", "apricot", "plum"];
var splitArray1 = [3,2,2,1];

const output = splitArray1.map(count => myArray1.splice(0, count));
console.log(output)


以上解决方案更新了原始 myArray1 数组。这是另一个使用 Array.slice()

的解决方案

var myArray1 = ["banana", "apple", "orange", "pear", "pineapple", "grapes", "apricot", "plum"];
var splitArray1 = [3,2,2,1];
var startCount = 0;

const output = splitArray1.map(count => myArray1.slice(startCount, startCount += count));
console.log(output)