我有array
[2, 1, 2, 1, 1, 1, 1, 1]
我想如果值的总和超过4,则在数组中生成一个新数组。
我想要一个类似的结果:[[2,1],[2,1,1],[1,1,1]]
答案 0 :(得分:2)
您可以使用Array#reduce
并使用它来添加最后插入的数组和整个结果数组的值。
算法的主要部分是这一行
!i || r[r.length - 1].reduce(add, 0) + a > 4 ?
r.push([a]) :
r[r.length - 1].push(a);
在其中,如果i
为零(开始时)或者如果结果的最后一个数组的总和与实际项目大于4的总和,则进行检查,然后是一个新的数组实际值已添加。如果没有,则元素被推送到最后一个数组。
var data = [2, 1, 2, 1, 1, 1, 1, 1],
add = function (a, b) { return a + b; },
result = data.reduce(function (r, a, i) {
!i || r[r.length - 1].reduce(add, 0) + a > 4 ? r.push([a]) : r[r.length - 1].push(a);
return r;
}, []);
console.log(result);

答案 1 :(得分:0)
你可以循环遍历数组并构建一个新的数组,如果总和超过4则将前一个数组推入结果如下:
var myArr = [2, 1, 2, 1, 1, 1, 1, 1];
var newArr = [];
var newInner = [];
for (var i = 0; i < myArr.length; i++) {
if (summArr(newInner) + myArr[i] > 4) {
newArr.push(newInner);
newInner = [];
}
newInner.push(myArr[i]);
if (i==myArr.length-1) newArr.push(newInner);
}
function summArr(arr) {
return arr.reduce(add, 0);
function add(a, b) {
return a + b;
}
}
答案 2 :(得分:0)
以简单的方式......
var array1 = [2, 1, 2, 1, 1, 1, 1, 1];
var tmp=[];
var output=[];
var sum=0;
for(var i=0; i<array1.length; i++){
sum +=array1[i];
if(sum<=4){
tmp.push(array1[i]);
}else{
output.push(tmp);
sum =array1[i];
tmp=[array1[i]];
}
}
output.push(tmp);
console.log(output);
&#13;