我正在尝试将数组中的数字推送到另外两个数组中。
如果我有一个数组[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]);
任何人都可以看到我需要做些什么才能实现这一目标?我无法理解。
答案 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.
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;