2016-10-05 6 views
-1

私は2つの引数を取る関数を持っているが、例えば、私が欲しいものロジックを持つ配列の配列を扱う関数の例は何でしょうか?

function test(a, b) { 
if (a == b) return true; 
return false; 
}; 

は、デフォルトでfalseを返す関数func(arg)を持つことです。 1つの引数をとり、この引数は配列の配列になります。関数の各インスタンスは、いくつかの動的に生成された数(整数)で開始される、のはmyNumberそれを呼び出すとのそれはこの機能は、次の操作を行う必要があり、0から10までちょうどいくつかのランダムな整数だとしましょうしましょう:

var myNumber = randomIntegerFrom0To10; 
var tmp = 0; 
test(arg[0][0], arg[1][0]); 
test(arg[0][0], arg[1][1]); 
test(arg[0][0], arg[1][2]); 
... 

となどすぐtest(...)戻りtrueとして、tmp++を設定し、

test(arg[0][1], arg[1][0]); 
test(arg[0][1], arg[1][1]); 
test(arg[0][1], arg[1][2]); 
.... 

に行くとすぐtest(...)戻りtrueとして、tmp++を設定し、

に行きます
test(arg[0][2], arg[1][0]); 
test(arg[0][2], arg[1][1]); 
test(arg[0][2], arg[1][2]); 
... 

...というように、

test(arg[0][arg[0].length-1], arg[1][0]); 
test(arg[0][arg[0].length-1], arg[1][1]); 
test(arg[0][arg[0].length-1], arg[1][2]); 
... 

まで - いつものように、できるだけ早くtest(...)戻りtrueとして、tmp++を設定しますが、tmpmyNumberと等しい場合test(arg[0][arg[0].length-1], arg[1][arg[1].length-1])た後、我々はチェックしなければなりません。はいの場合、関数はtrueを返して停止する必要があります。ない場合は、我々は(我々は常にmyNumberとそれぞれ比較した後tmp = 0を設定することに注意してください)続けなければならない:

tmp = 0; 
test(arg[0][0], arg[2][0]); 
test(arg[0][0], arg[2][1]); 
test(arg[0][0], arg[2][2]); 
... 

とすぐtest(...)として戻っtrueは、tmp++設定...というように。我々はtmpmyNumberに等しいことを見たことがない場合は、我々は最終的には、上記のロジックを継続

test(arg[0][0], arg[arg.length-1][0]); 
test(arg[0][0], arg[arg.length-1][1]); 
test(arg[0][0], arg[arg.length-1][2]); 

に来ます。ここで最長の方法は

test(arg[0][(arg[0].length-1)], arg[arg.length-1][(arg[arg.length-1].length-1)]); 

に行き、現在のtmpを調べることです。それはmyNumberに等しい場合、関数はtrueを返して終了するが、そうでなければ、我々は継続しなければならない必要があります。

tmp = 0; 
test(arg[1][0], arg[2][0]); 
test(arg[1][0], arg[2][1]); 
test(arg[1][0], arg[2][2]); 
... 

...

test(arg[1][(arg[1].length-1)], arg[arg.length-1][(arg[arg.length-1].length-1)]); 

まで継続し、現在tmpを確認してください。その上

tmp = 0; 
test(arg[2][0], arg[2][0]); 
test(arg[2][0], arg[2][1]); 
test(arg[2][0], arg[2][2]); 

を...と:trueを返すか、または継続のどちらか、いつものように。最長の理論的に可能な方法は、現在のtmpmyNumberに等しい場合、trueを返し、

test(arg[arg.length-2][(arg[arg.length-2].length-1)], 
arg[arg.length-1][(arg[arg.length-1].length-1)]); 

に行くとすることであろう。それ以外の場合は、falseを返し、最後に停止します。

例:私たちはこのような入力があった場合

var myNumber = 1; 
var tmp = 0; 
var input1 = [ [ 4, 5 ], 
      [ 3, 2, 8, 7, 1, 10 ], 
      [ 9, 4, 8, 50 ], 
      [ 10, 20, 30] 
     ]; 

// 4 !== 3; tmp == 0; 
// 4 !== 2; tmp == 0; 
// 4 !== 8; tmp == 0;   
// ...4 !== 10 ; tmp == 0; 
// 5 !== 3 ; tmp == 0; 
// 5 !== 2 ; tmp == 0; 
// ...5 !== 10 ; tmp == 0; is the current tmp equal to myNumber? No. So, continue: 
// 3 !== 9 ; tmp == 0; 
// 3 !== 4 ; tmp == 0; 
// 3 !== 8 ; tmp == 0; 
// 3 !== 50 ; tmp == 0; 
// 2 !== 9 ; tmp == 0; 
// ...2 !== 50 ; tmp == 0; 
// 8 !== 9 ; tmp == 0; 
// 8 !== 4 ; tmp == 0; 
// test(8,8) returns true; set tmp++ and, since there is no need for test(8,50), go to 
// 7 !== 9 ; tmp == 1; 
// ...7 !== 50 ; tmp == 1; 
// 1 !== 9 ; tmp == 1; 
// ...10 !== 50; tmp == 1; is the current tmp equal to myNumber? Yes. 
// So, return true and stop. 

は:

var input2 = [ [ 1, 2 ], 
      [ 3, 4, 5, 6, 7, 8 ], 
      [ 9, 10, 11, 12 ], 
      [ 13, 14, 15] 
     ]; 

を、我々は「テスト」の操作の可能な最大量を実行し、test(12,15falseを返さなければならないでしょう)。
問題は、上記のロジックに従って、与えられた2つの入力例について記述されたアクションを実行するような、どのような作業関数の例でしょうか:​​267149とfunc(input2)

+2

ご質問はありますか?ところで、 'if(a == b)がtrueを返します。 return false; 'は' return a == b; 'と書くのと全く同じです。 –

+0

質問とそのタイトルを編集し、質問自体を追加しました。私はそのような機能の例を必要としているだけです。 –

答えて

1

残りの配列を1つの配列に結合して比較するロジックを使用しました。これは、書き込みが必要なロジックも削減します。

function traverseForMyNumber(){ 
    var myNumber = 1; 
    var tmp = 0; 
    var input = [ [ 4, 5 ], 
     [ 3, 2, 8, 7, 1, 10 ], 
     [ 9, 4, 8, 50 ], 
     [ 10, 20, 30] 
    ]; 
for(var i = 0; i< input.length; i++){ 
    var copyArray = input.slice(); 
    var tempArray = copyArray.splice(i, 1); 

    //Concat rest of the arrays into single arary for easy traversal 
    copyArray = [].concat.apply([], copyArray); 

    //Logic for incrementing tmp 
    for(var j = 0; j< tempArray[0].length; j++){ 
    for(var k = 0; k < copyArray.length; k++){ 
     if(test(tempArray[0][j],copyArray[k])){ 
     tmp++; 
     if(tmp === myNumber) return true; 
     } 
    } 
    } 
} 
} 

function test(a, b) { 
    return a === b; 
} 

traverseForMyNumber(); 
関連する問題