2016-10-05 52 views
-1

我有一個函數有兩個參數,例如,什麼是使用一些邏輯數組處理函數的例子?

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

我要的是有一個功能func(arg),默認情況下返回false。它需要一個參數,而這個參數將是一個數組數組。

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]); 
... 

,併爲:函數的每個實例將與一些動態生成的編號(整數),姑且稱之爲myNumber,讓我們說這是剛剛從0到10的一些隨機整數此功能應該做到以下幾點開始一旦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++,但test(arg[0][arg[0].length-1], arg[1][arg[1].length-1])後,就要檢查一下是否tmp等於myNumber。如果是,則該函數應返回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++ ...等等。如果我們從來沒有看到tmp等於myNumber,我們最終會

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。與往常一樣,要麼返回true或繼續:

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

...等等。最長理論上是可行的辦法,是去

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

,如果當前tmp等於myNumber,返回true。否則,返回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,15後返回false)。
問題是:什麼是任何工作函數的例子,例如,遵循上述邏輯,將執行兩個給定輸入示例所描述的操作:​​267149和func(input2)

+2

你的問題是什麼?順便說一句,如果(a == b)返回true;返回false;'完全等價於寫'return a == b;'。 – 2016-10-05 04:57:33

+0

編輯了這個問題和它的標題,並添加了問題本身。我只需要這樣的功能的例子,就這些。 –

回答

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(); 
相關問題