4
nums = [2 5 3 7]
result = []
result.push {x:nums[0]}
for n in nums.slice(1)
    result.push {n:n + result[-1].x}
log result
# [{x:2} {x:7} {x:10} {x:17}]

map各要素は前の要素に依存するため、これを関数を使用して機能的に表現することは困難です。このアルゴリズムの正しい機能ソリューションは何ですか?

4

6 に答える 6

2

JavaScript

合計の実行中のカウンターを保持し、毎回新しい数を追加します。

var nums = [2,5,3,7];

var createObject = function(nums){ 
    var result = [],
        total = 0;

    for(var i = 0; i < nums.length; i++){
        total += nums[i]; 
        result.push({"x": total});
    }

    return result;
};

JSFIDDLE

于 2013-06-07T20:52:37.960 に答える
2

dandavisコーヒースクリプトの答えは次のとおりです。

nums.map ((x)->{x: @[0] += x}), [0]

少し明確なバリエーション

nums.map ((x)->{x: @accum += x}), {accum:0}

内包表記の使用coffeescript(および同じアキュムレータの考え方)

accum = 0; z = ({x: accum += i} for i in nums)
于 2014-02-04T22:52:58.843 に答える
1
map (-> {x:it}) <| (fold ((acc, a) -> acc ++ [a + ((last acc) ? 0)]), []) <| [2, 5, 3, 7]
于 2013-10-25T19:16:18.473 に答える