将二合一项目分组

时间:2017-07-14 12:37:36

标签: javascript arrays

我正在尝试将数组中的数字推送到另外两个数组中。

如果我有一个数组[1,4,3,2];,它应该返回[[1,4],[3,2]];

var arrayPairSum = function(nums) {

    var len = nums.length / 2;
    var arr = [];

    for(var i = 0; i < len; i ++) {
        var newArr = [];
        newArr.push(nums[i]);
        newArr.push(nums[i + 1]);
        arr.push(newArr);
    }

   console.log(arr); //this should give me [[1,4],[3,2]];
};


arrayPairSum([1,4,3,2]);

任何人都可以看到我需要做些什么才能实现这一目标?我无法理解。

3 个答案:

答案 0 :(得分:2)

您可以使用reduce方法来实现此目的。 reduce方法接受在数组中的每个项目上提供的callback方法。

换句话说,此方法对累加器应用函数,并将数组中的每个元素(从左到右)应用于降低为单个值。

var array=[1,4,3,2,8];
var contor=array.reduce(function(contor,item,i){
  if(i%2==0)
      contor.push([array[i],array[i+1]].filter(Boolean));
  return contor;
},[]);
console.log(contor);

答案 1 :(得分:1)

如果你真的想迭代数组,可以跳过每一个索引,所以i+=2(正如satpal已经指出的那样):

var arrayPairSum = function(nums) {

  var len = nums.length - 1;//if nums.length is not even, it would crash as youre doing nums[i+1], so thats why -1
  var arr = [];
  for (var i = 0; i < len; i += 2) {
    var newArr = [];
    newArr.push(nums[i]);
    newArr.push(nums[i + 1]);
    arr.push(newArr);
  }

  console.log(arr); //this should give me [[1,4],[3,2]];
};
arrayPairSum([1, 4, 3, 2]);

最后一个上面的每一对都会收掉。如果你想在最后有一个[值],可以选择

len=nums.length

在推送之前检查

if(i+1<nums.length) newArr.push(nums[i+1]);

答案 2 :(得分:0)

你非常接近。只需将长度更改为nums.length,将循环增量i更改为2.

&#13;
&#13;
var arrayPairSum = function(nums) {

    var len = nums.length - 1;
    var arr = [];

    for(var i = 0; i < len; i+=2) {
        var newArr = [];
        newArr.push(nums[i]);
        newArr.push(nums[i + 1]);
        arr.push(newArr);
    }

   console.log(arr); //this should give me [[1,4],[3,2]];
};


arrayPairSum([1,4,3,2]);
&#13;
&#13;
&#13;