0

私がこの配列を持っているとしましょう:

var likes = [4,7,3,11,3,73,78,34,7,13];

ただし、いくつかの制限により、5の長さしか使用できません。したがって、5の配列長に「変換」し、他の位置を均等に分散して合計します。

誰かがこれをどのように行うことができるか手がかりを持っていますか?

4

3 に答える 3

1

何が欲しいのかよくわからないので、回答も投稿します。このコードは、入力の大きさに関係なく、出力配列で5の固定長を維持します。

var input = [4,7,3,11,3,73,78,34,25,7,13,19,2],
    max = 5,
    out = [];

var adjacentItems = Math.ceil(input.length / max);
for(var i=0; i<input.length; i += adjacentItems) {
    var aSum = 0;
    for(var j=i; j<Math.min(i+adjacentItems, input.length); j++) {
        aSum += input[j];
    }
    out.push(aSum);
}

フィドルをチェックしてください

于 2013-02-06T13:30:17.623 に答える
1

多分これはあなたの問題を解決するでしょう:

var likes = [4,7,3,11,3,73,78,34,7,13],
    result_array = [ ];

for(var i = 0; i < likes.length; i++)
{
   if(i % 2)
   {
       var new_val = likes[i - 1] + likes[i];
       result_array.push(new_val);
   }
}

ここで動作するjsFiddleを参照してください。

これにより、新しい配列にが含まれ[ 11, 14, 76, 112, 20 ]、新しい値が初期配列に追加されると、同様に長さが長くなります。

于 2013-02-06T13:05:20.193 に答える
0

最後に、私は答えを見つけたと思います!:) 何か提案があれば、コメントしてください!

var likes = [1,2,3,4,5,6,7,8,9,10];
    result_array = [];
    result_array2 = [];    
    max = 8;

if (likes.length>max){
    result_array = likes;
    for (var i = 0; i < max; i++) {
            var res = (likes.length - max) / max
            var new_val = (result_array[i] + (result_array[i+1] * res));
            result_array2.push(new_val);

    }

result_array = [];
result_array = result_array2;

}else{
result_array=likes
}

alert(result_array);

こちらのコードをご確認ください

于 2013-02-07T16:13:11.627 に答える