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

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

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

我想要一个函数来返回 4 个子数组:

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

我发现这段代码显然是为了做到这一点,但它返回了完整的数组:

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

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

回答

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


以上是将数组["banana","apple","orange",…..etc]拆分为基于其他数组的组,即。[2,7,3]的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>