2017-07-04 5 views
-1

特定の配列で最大の隣接する製品を見つけるための次の解を理解しようとしています。配列内で最大の隣接する製品を見つける(JavaScript)

例:JSで

For inputArray = [3, 6, -2, -5, 7, 3], the output should be 
adjacentElementsProduct(inputArray) = 21. 

7 and 3 produce the largest product. 

考えられる解決策:

function adjacentElementsProduct(arr) { 
    return Math.max(...arr.slice(1).map((x,i)=>[x*arr[i]])) 
    } 

私は二つのことを理解することに苦労しています:

  1. 3つのドットが正確に行うのですか何とこれはどのように関数に渡されますか?これをもっと分かりやすい方法で書く方法はありますか?私はそれがES6のある種の「普及」機能だと知っていますが、それでも完全には理解できません。

  2. スライスに引数として「1」を挿入するのはなぜですか?私が最初に始めたのは「0」を入力することでした。なぜなら、最初から始めてからすべてをループし、どの隣接する製品が最大であるかを知りたいからです。

私はアドバイス、リンク、説明をお待ちしております。

ありがとうございました。

乾杯!

+1

1 - http://babeljs.io/repl/#?babili=false&evaluate=true&lineWrap=(それは[こちらtranspiled]ないものを見るためにES5に普及ドキュメント、またはtranspileを読みます偽&プリセット= ENV&ターゲット=&ブラウザ=&組み込みコマンド=偽&デバッグ=偽&実験=真&緩い=偽&スペック=真&code_lz = GYVwdgxgLglg9mABAQwCYCtkQKZigUQBtsBbXKAZwAUAnOVEaACmRpoEpEBvAKEURrYoIGkgCyyKAAsAdCWQAPJjJWsaMioRg4mARnZzkAByZMFAGhjsAvAD4A2goBUa-zAC679ux4BfIA)、2 - 理由と* N *配列内の項目は、あなたは、n *確認したい - どうもありがとうございます –

答えて

0

1. 3つのドットは正確に何をしていますか?これはどのように関数に渡されますか?これをもっと分かりやすい方法で書く方法はありますか?私はそれがES6のある種の「普及」機能だと知っていますが、それでも完全には理解できません。

Math#maxは、パラメータとして数値のリストを必要とし、mapは配列を生成します。 spread syntaxは、展開される配列をパラメータのリストに変換するために使用されます。

const arr = [1, 2, 3]; 
 

 
console.log('max on array', Math.max(arr)); 
 

 
console.log('max on list of parameters', Math.max(...arr));

この場合、あなたはパラメータのリストに配列を変換するためにFunction#applyを使用することができます。しかし、私はそれが読みにくいと感じます。

const arr = [1, 2, 3]; 
 

 
console.log(Math.max.apply(Math, arr));

2.なぜ我々はスライスする引数として "1" を挿入しますか?私が最初に始めたのは「0」を入力することでした。なぜなら、最初から始めてからすべてをループし、どの隣接する製品が最大であるかを知りたいからです。

2つの配列の反復順序を分割します。 inputArray.slice(1)の各反復に今

[3, 6, -2, -5, 7, 3] // inputArray 
[6, -2, -5, 7, 3] // inputArray.slice(1) 

x: 6, i = 0, arr[0] = 3 
x: -2, i = 1, arr[1] = 6 
x: -5, i = 2, arr[2] = -2 

inputArray.slice(1)アレイはinputArrayの2要素から始まるので、インデックスinputArrayの第1要素に(i)ポイント。結果は隣接する2つの数の積の配列です。

+0

1つの*製品完全な説明のために! – ErnieandBert

+0

ようこそ:)リンクをたどって、広がりや働きかけの詳細を知ることを忘れないでください。 –

0

単純に次のようにします。

function getNeigboringMaxProduct([x,...xs], r = -Infinity){ 
 
    var p = x * xs[0]; 
 
    return xs.length ? getNeigboringMaxProduct(xs, p > r ? p : r) 
 
        : r; 
 
} 
 

 
var arr = [3, 6, -2, -5, 7, 3], 
 
    res = getNeigboringMaxProduct(arr); 
 
console.log(res);

関連する問題