使用具有某种逻辑的数组数组的函数示例是什么?
What would be an example of the function working with an array of arrays with some logic?
我有一个接受两个参数的函数,例如
function test(a, b) {
if (a == b) return true;
return false;
};
我想要的是有一个函数func(arg)
,默认情况下returns false
。它有一个参数,这个参数将是一个数组数组。该函数的每个实例都将以一些动态生成的数字(整数)开始,我们称它为 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(...)
returns true
后立即设置 tmp++
并转到
test(arg[0][1], arg[1][0]);
test(arg[0][1], arg[1][1]);
test(arg[0][1], arg[1][2]);
....
并在 test(...)
returns 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(...)
returns true
,设置tmp++
,但在test(arg[0][arg[0].length-1], arg[1][arg[1].length-1])
之后,我们必须检查是否tmp
等于 myNumber
。如果是,函数应该 return 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(...)
returns 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
,函数应该 return 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
。一如既往,return 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
,return true
。否则,return 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" 操作和 return false
在 test(12,15
之后)。
问题是:任何工作函数的示例是什么,这样,按照上述逻辑,将执行针对两个给定输入示例描述的操作:func(input1)
和 func(input2)
?
我使用了将其余数组组合成一个数组进行比较的逻辑,这也减少了我需要编写的逻辑。
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();
我有一个接受两个参数的函数,例如
function test(a, b) {
if (a == b) return true;
return false;
};
我想要的是有一个函数func(arg)
,默认情况下returns false
。它有一个参数,这个参数将是一个数组数组。该函数的每个实例都将以一些动态生成的数字(整数)开始,我们称它为 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(...)
returns true
后立即设置 tmp++
并转到
test(arg[0][1], arg[1][0]);
test(arg[0][1], arg[1][1]);
test(arg[0][1], arg[1][2]);
....
并在 test(...)
returns 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(...)
returns true
,设置tmp++
,但在test(arg[0][arg[0].length-1], arg[1][arg[1].length-1])
之后,我们必须检查是否tmp
等于 myNumber
。如果是,函数应该 return 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(...)
returns 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
,函数应该 return 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
。一如既往,return 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
,return true
。否则,return 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" 操作和 return false
在 test(12,15
之后)。
问题是:任何工作函数的示例是什么,这样,按照上述逻辑,将执行针对两个给定输入示例描述的操作:func(input1)
和 func(input2)
?
我使用了将其余数组组合成一个数组进行比较的逻辑,这也减少了我需要编写的逻辑。
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();