3

そのような配列を合計する方法 [ '', '4490449', '2478', '1280990', '22296892', '244676', '1249', '13089', '0', '0', '0\n' ]

その配列でそのようなものを呼び出すと['','4490449', ... , '0\n' ].reduce(function(t,s){ return t+s)、文字列は結合され、合計されません。

私はいくつかのキャストを試みましparseInt()たが、これは次の結果になりNaNます:)

4

6 に答える 6

8

合計する値が整数であることを確認する必要があります。考えられる解決策の 1 つを次に示します。

var ary=[ '', '4490449', '2478', '1280990', '22296892', 
          '244676', '1249', '13089', '0', '0', '0\n' ];

console.log(
  ary
    .map( function(elt){ // assure the value can be converted into an integer
      return /^\d+$/.test(elt) ? parseInt(elt) : 0; 
    })
    .reduce( function(a,b){ // sum all resulting numbers
      return a+b
    })
)​;

'28329823' をコンソールに出力します。

http://jsfiddle.net/hF6xv/でフィドルを参照してください

于 2012-10-29T20:02:20.000 に答える
3

これはうまくいくようです:

var arry = [ 'asdf', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'ham10am' ];

var res = arry.reduce(function(prev, curr){
    return (Number(prev) || 0) + (Number(curr) || 0);
});

console.log(res); // prints 45
于 2012-10-29T20:04:49.693 に答える
1

これを試して:

var sum = 0,
    arr = [ '', '1', '2', '3.0','4\n', '0x10' ],
    i = arr.length;

while( i-- ) {
    // include radix otherwise last element gets interpreted as 16
    sum += parseInt( arr[i], 10 ) || 0; 
}

console.log( sum ) // sum => 10 as 3.0 and 4\n were successfully parsed

ここでフィドル

于 2012-10-29T20:09:37.457 に答える
1

parseInt の使用は正しいです。

ただし、reduce 引数ごとに使用する必要があります。

さらに、各 parseInt の結果が数値であるかどうかも確認する必要があります。そうでない場合、関数は NaN で数値を合計しようとし、他のすべての合計も NaN になるためです。

parseInt に関するMozilla の ECMAscriptドキュメントには、次のように書かれています。

最初の文字を数値に変換できない場合、parseInt は NaN を返します。

次に、NaN が目標を台無しにしないようにするために、次のように実装できます。

function parseIntForSum(str) {
    var possibleInteger = parseInt(str);
    return isNaN(possibleInteger) ? 0 : possibleInteger;
}

function sum(f, s) {
    return parseIntForSum(f) + parseIntForSum(s);
}

window.alert('sum = ' + [ '', '4490449', '2478', '1280990', '22296892', '244676', '1249', '13089', '0', '0', '0\n' ].reduce(sum)​​​);​

これが動作するjsfiddleです:http://jsfiddle.net/cLA7c/

于 2012-10-29T20:17:18.810 に答える
0

配列に整数ではない値がいくつかあります。それらがすべてであると仮定しましょう。次に、次のことができます。

['4490449', '2478', '1280990', '22296892', '244676', '1249', '13089'].reduce( 
    function(t, s) { 
        return parseInt(t) + parseInt(s); 
    }
);
于 2012-10-29T19:59:09.247 に答える