如何转换复杂数组中的数组

时间:2016-07-06 08:11:54

标签: javascript arrays

我有array [2, 1, 2, 1, 1, 1, 1, 1]

我想如果值的总和超过4,则在数组中生成一个新数组。

我想要一个类似的结果:[[2,1],[2,1,1],[1,1,1]]

3 个答案:

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

演示:https://jsfiddle.net/q0ps7960/

答案 2 :(得分:0)

以简单的方式......

&#13;
&#13;
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;
&#13;
&#13;