我有這個array
[2, 1, 2, 1, 1, 1, 1, 1]
如何將數組轉換在複雜的陣列
我想,如果值的總和超過4,這使數組的新陣列。
我想這樣的結果:[[2,1],[2,1,1],[1,1,1]]
我有這個array
[2, 1, 2, 1, 1, 1, 1, 1]
如何將數組轉換在複雜的陣列
我想,如果值的總和超過4,這使數組的新陣列。
我想這樣的結果:[[2,1],[2,1,1],[1,1,1]]
你可以使用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 –
你可以通過數組循環,並建立一個新的,如果總和超過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;
}
}
簡單的方法...
var array1 = [2, 1, 2, 1, 1, 1, 1, 1];
\t var tmp=[];
\t var output=[];
\t var sum=0;
\t \t for(var i=0; i<array1.length; i++){
\t \t \t sum +=array1[i];
\t \t \t if(sum<=4){
\t \t \t \t tmp.push(array1[i]);
\t \t \t }else{
\t \t \t \t output.push(tmp);
\t \t \t \t sum =array1[i];
\t \t \t \t tmp=[array1[i]];
\t \t \t }
\t \t }
\t \t output.push(tmp);
console.log(output);
我不明白的邏輯規則.. – webdeb