Javascript 根据其他数组,即[2,7,3]将数组[“香蕉”、“苹果”、“橙子”等]拆分为组
我有一堆数组,我需要根据另一个匹配数组中的数字将它们分成更小的组。例如:Javascript 根据其他数组,即[2,7,3]将数组[“香蕉”、“苹果”、“橙子”等]拆分为组,javascript,arrays,split,slice,Javascript,Arrays,Split,Slice,我有一堆数组,我需要根据另一个匹配数组中的数字将它们分成更小的组。例如: var myArray1 = ["banana", "apple", "orange", "pear", "pineapple", "grapes", "apricot", "plum"]; var splitArray1 = [3,2,2,1]; 我想要一个返回
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;
}
函数chunkArray(数组,大小){
var chunked_arr=[];
对于(var i=0;i
这是在谷歌应用程序脚本中,如果它有区别的话。您可以使用
var myArray1=[“香蕉”、“苹果”、“橙子”、“梨”、“菠萝”、“葡萄”、“杏子”、“李子”];
var splitArray1=[3,2,2,1];
const output=splitArray1.map(count=>myArray1.splice(0,count));
console.log(输出)
const output=splitArray1.map(count=>myArray1.splice(0,count))代码>不需要对原始数组进行变异。我使用array.slice()添加了一个新的解决方案,但没有进行变异。:)在第二个代码片段中,您可以内联startCount+=count
,还可以将其缩短为const output=splitArray1.map(count=>myArray1.slice(startCount,startCount+=count))代码>尽管有些人可能对可读性有疑问;+=
中的赋值可能很容易被忽略。@Terry我是不是遗漏了什么,但给定答案中的两个答案不是都是这样的吗?“对于不熟悉“突变”数组的人…”突变是指当你改变某个对象的某个属性时;类似于从数组中添加/删除/排序元素。变异的“问题”是,随着现代应用程序越来越大、越来越分散,人类很难理解变异的所有含义。你的应用程序中一些不相关的部分也可能包含对这个对象的引用,你在这里所做的更改可能会在那里引入意外的行为/错误,这完全是因为它们都使用同一个对象。检查不变性;概念和实施