10

要素ごとにいくつかの配列を追加する必要があります。つまり、同じ長さの配列がいくつかあり、入力の合計である要素の数が同じである配列が1つだけ必要です。アンダースコアには、すべての要素を1つに折りたたんで、関数を使用してすべての要素をマップするメソッドがありますが、2つの配列を区分的に組み合わせる方法が見つかりません。

元の配列がだった場合[1,2,3,4,5,6][1,1,1,1,1,1]結果[2,2,2,2,2,2]はになります[4,5,6,7,8,9]

配列を反復処理することでそれができることはわかっていますが、underscore.js関数を使用する方が簡単/高速であるかどうか疑問に思います。できますか?どのように?

4

5 に答える 5

11

はい、より簡単に、より速く、いいえ。a をエミュレートするには、 aと sum-zipWithを組み合わせることができます。zipreduce

var arrays = [[1,2,3,4,5,6], [1,1,1,1,1,1], [2,2,2,2,2,2]];

_.map(_.zip.apply(_, arrays), function(pieces) {
     return _.reduce(pieces, function(m, p) {return m+p;}, 0);
});
于 2013-02-27T09:29:33.900 に答える
5

アンダースコアを使用すると簡単になるとは思いません。次の 2 つのオプションがあります。

var a = [1,2,3,4,5,6]
  , b = [1,1,1,1,1,1]
  , c = [2,2,2,2,2,2];

var result = a.map(function(_,i) {
  return a[i] + b[i] + c[i];
});

// OR

var result = [];
for (var i = 0; i < a.length; i++) {
  result.push(a[i] + b[i] + c[i]);
}

console.log(result); //=> [4,5,6,7,8,9]
于 2013-02-27T09:26:30.517 に答える
4

以下の例のように機能するかなりクールな zipWith ( https://lodash.com/docs#zipWith ) 演算子を持つアンダースコアの代わりに、 lodash ( https://lodash.com/ ) を使用できます。(注 _.add も lodash 数学関数です)

var a = [1,2,3,4,5,6]
  , b = [1,1,1,1,1,1]
  , c = [2,2,2,2,2,2];

var result = _.zipWith(a, b, c, _.add);

// result = [4, 5, 6, 7, 8, 9]
于 2015-05-13T19:49:29.747 に答える
0

map および reduce と組み合わせて zip を使用できます。テストされていませんが、このようなものが機能する可能性があります

var result = _.map(_.zip(array1, array2, array3),function(zipped){return _.reduce(zipped,  function(memo, num){ return memo + num; }, 0)});
于 2013-02-27T09:29:49.033 に答える
0

Lodash 4 の使用:

var arrays = [
  [1, 2, 3, 4, 5, 6],
  [1, 1, 1, 1, 1, 1],
  [2, 2, 2, 2, 2, 2]
];

var result = _.map(_.unzip(arrays), _.sum);
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>

于 2018-11-14T13:37:40.820 に答える