我正在编写一个带有数组和数字参数的函数,并返回从给定数组中拆分的数组的数量。所以调用chunkArrayInGroups([" a"," b"," c"," d"],2);应该返回[a,b] [c,d]。我的代码返回[a,c] [b,d]。它应该是一个简单的解决方案,但我仍然无法弄清楚。
function chunkArrayInGroups(arr, size) {
// Break it up.
var newarr=[];
var amount=0;
if(arr.length%2===0)
{
amount=arr.length/size;
}
else
amount=(arr.length/size)+1;
console.log(amount);
for(i=0;i<amount;i++)
{
newarr[i]=[];
}
console.log(newarr);
for(z=0;z<arr.length;z=z+size)
{
for(x=0;x<size;x++)
{
newarr[x].push(arr[z+x]);
}
}
console.log(newarr);
}
chunkArrayInGroups(["a", "b", "c", "d"], 2);
另外,如果你看到错误的语法,请纠正我,我已经习惯了编写Java。谢谢!
答案 0 :(得分:2)
运行数组中的所有项目,每当索引%size为0时,添加另一个子数组,然后将项目推送到最后一个子数组。
function chunkArrayInGroups(arr, size) {
var chunks = [];
for(var i = 0; i < arr.length; i++) {
if(i % size === 0) {
chunks.push([]);
}
chunks[chunks.length - 1].push(arr[i]);
}
return chunks;
}
console.log('Size 2', JSON.stringify(chunkArrayInGroups(['a', 'b', 'c', 'd'], 2)));
console.log('Size 3', JSON.stringify(chunkArrayInGroups(['a', 'b', 'c', 'd'], 3)));
console.log('Size 4', JSON.stringify(chunkArrayInGroups(['a', 'b', 'c', 'd'], 4)));
console.log('Size 6', JSON.stringify(chunkArrayInGroups(['a', 'b', 'c', 'd'], 6)));
答案 1 :(得分:0)
您可以将Array.slice方法与循环一起使用来对数组进行分块:
function chunkArrayInGroups(arr, size) {
let i,j,res = [];
for (i=0,j=arr.length; i<j; i+=size) {
res.push(arr.slice(i,i+size));
}
return res;
}
console.log(chunkArrayInGroups(["a", "b", "c", "d"], 2));
答案 2 :(得分:0)
问题来自newarr[x].push(arr[z+x]);
。
每次第二个循环运行时,它会向newarr
内的第一个数组添加1个字母,并在newarr
内向第二个数组添加1个字母。
这是因为循环内的x
(在size
= 2的情况下),从0(第一个数组)开始,然后变为1(第二个数组)。
解决此问题:
newarr[x].push(arr[z+x]);
应更改为newarr[z/size].push(arr[z+x]);
答案 3 :(得分:0)
除了给定的答案,您可以使用Array#reduce
的另一种方法,并检查是否需要新数组用于新块。
function chunkArrayInGroups(array, size) {
return array.reduce(function(r, a, i, aa) {
i % Math.ceil(aa.length / size) || r.push([]);
r[r.length - 1].push(a);
return r;
}, []);
}
console.log(chunkArrayInGroups(["a", "b", "c", "d", "e"], 3));
答案 4 :(得分:0)
这将是我的解决方案;
function chunkArrayInGroups(a,n){
return n > 0 ? n <= a.length ? a.reduce((r,e,i) => (r[Math.floor(n*i/a.length)].push(e),r), Array(n).fill().map(_ => [])) : a : a;
}
var a = ["a", "b", "c", "d","e"],
n = 3;
result = chunkArrayInGroups(a,n);
console.log(result);