で配列を変換するために、どのように私は、値の合計が4を超えた場合、私はしたい。このarray
[2, 1, 2, 1, 1, 1, 1, 1]
複雑な配列
を持って、それは、配列内の新しい配列を作るのです。 [[2,1],[2,1,1],[1,1,1]]
で配列を変換するために、どのように私は、値の合計が4を超えた場合、私はしたい。このarray
[2, 1, 2, 1, 1, 1, 1, 1]
複雑な配列
を持って、それは、配列内の新しい配列を作るのです。 [[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