尝试在javascript

时间:2017-08-02 16:21:01

标签: javascript arrays

我正在编写一个带有数组和数字参数的函数,并返回从给定数组中拆分的数组的数量。所以调用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。谢谢!

5 个答案:

答案 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);