【问题标题】:Split array ["banana", "apple", "orange", .....etc ] into groups based on other array, ie. [2,7,3] [duplicate]将数组 ["banana", "apple", "orange", .....etc ] 拆分为基于其他数组的组,即。 [2,7,3] [重复]
【发布时间】:2021-04-13 01:02:14
【问题描述】:

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

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

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

【问题讨论】:

  • @Terry 我是否遗漏了什么,但给定的dup 的两个答案都没有回答这个问题吗?
  • “对于不熟悉‘变异’数组的人......” 变异是指你改变对象的某些属性;就像从数组中添加/删除/排序元素一样。突变的“问题”在于,随着现代应用程序的规模更大、分布更广,人类很难掌握突变的所有含义。您的应用程序的某些不相关部分也可能包含对此对象的引用,并且您在此处的更改可能会在那里引入意外的行为/错误,这仅仅是因为它们都使用同一个对象的纯粹巧合。检查不变性;概念与实现

标签: javascript arrays split slice


【解决方案1】:

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

【讨论】:

  • const output = splitArray1.map(count =&gt; myArray1.splice(0, count));
  • 不需要改变原始数组。
  • 我使用 Array.slice() 添加了一个新的解决方案,没有变异。
  • :) 在您的第二个 sn-p 中,您可以内联 startCount += count 并将其缩短为 const output = splitArray1.map(count =&gt; myArray1.slice(startCount, startCount += count));,尽管有些人可能对此存在可读性问题; += 中的分配可能很容易被忽略。
猜你喜欢
  • 2012-11-30
  • 1970-01-01
  • 2017-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-08
  • 2016-07-03
  • 1970-01-01
相关资源
最近更新 更多