2016-03-20 30 views
0

長さの異なる2つの配列をマージする方法と、より短い配列の値は大きな配列の値よりも優先されますが、その結果は大きな配列の長さになります。それはlongの長さが二倍shortと比較されるが、それはそれは大きさでか、単に一つの要素長くトリプルだ場合でも動作するはずと思われる上記の例ではJavascript配列:2つの配列を優先的にマージする

var short = [[ 25,12],   [576, 12],   [576,584],   [ 25,584],   [ 25,12]]; 
var long = [[301,12],[400,192],[602,230],[461,380],[487,584],[301,497],[115,584],[140,380],[301,12]]; 
// --------------------as suggested by the above 
var result = [[ 25,12],[400,192],[576, 12],[461,380],[576,584],[301,497],[ 25,584],[140,380],[ 25,12]]; 

:私は下の2つのアレイに配置する方法よく見てください。

+0

配列の長さの違いに置き換えられた要素が関連しているようです(長い配列は2倍の長さであるため、短い配列はすべての2番目の要素を置き換えます)。より長い配列の長さは、常に短い配列の長さの整数倍になりますか? – RobG

+0

まずは、すべての人(あなた自身を含む)が理解しやすくなるように、ロジックを簡単な英語で定義することから始めてください。 – Amit

+0

@RobG - サンプルデータそのものが整数の倍数の規則に合わない – Amit

答えて

1

これはかなり簡単です。単純に長い配列のコピーを作成し、このコピーの要素を短い配列の要素で上書きします。

var m = Math.floor(long.length/short.length); 

var result = long.slice(); 
for(var i = 0; i < short.length; ++i) { 
    result[i*m] = short[i]; 
} 

その後編集:実は、これは間違っています。この問題の興味深い問題は、スペーシングアルゴリズムであり、この特別な単純な乗算では得られません。

この問題は、この問題が何であるかを明確にするのに役立ちますので、とにかくこの回答を残しておきます。

+0

あなたはそれがOPが望んでいることをどのように知っていますか? – Amit

+0

ありがとう、それをテストするために私に数分を与えてください。 Btw、実行例を作っていただけますか? – thednp

+0

@thednp - 実際、私の答えはうまくいきません。この問題は、それを離してしまうようなもので、私の単純な乗算は間違っています。私はおそらくこれを削除します。 –

関連する問題