给定的函数应该接受任意数组的数组。
它应该在相同索引的整数旁边减去每两个整数。
var ArrayFirst = [4, 34, 6, 1,5];
var ArraySecond = [4,34,6,1,4];
function Find(Arg) {
var ResultArray;
var SecondArray = [];
for (var i = 0; i < Arg.length; i++) {
var FirsArray;
for (var j = 0; j < Arg.length; j++) {
if (Arg.indexOf(Arg[i]) != Arg.indexOf(Arg[j])) {
console.log(Arg.indexOf(Arg[i]) + 'AND' + Arg.indexOf(Arg[j]));
FirstArray = Arg[i] - Arg[j];
console.log(FirstArray);
if (FirstArray >= 0) {
SecondArray.push(FirstArray);
}
}
}
//console.log(SecondArray);
}
ResultArray = Math.min.apply(this, SecondArray);
console.log(ResultArray);
return ResultArray;
}
所以在调试之后我发现函数Find可以使用ArrayFirst,但不能使用ArraySecond
问题:当Array有两个具有相同值的整数时,为什么函数不起作用?
已更新
对不起那些我没有提出更多细节的人
任务:创建一个函数,结果将给出从数组中减去两个整数的和,该和不能减去具有相同索引的两个整数,总和不能低于0,最接近0的和将是正确的结果。
示例:[4,6,3,56,4] 4-6,4-3 ...... 4-4,然后6-4,6-3 ... 6-4等 因此,结果将为0,因为4-4 sum为0
一些提示
首先我想也许这与数组上的操作有关但后来我使用了apply并调用了参数
if (Array.prototype.indexOf.apply(arguments[0],[arguments[0][i]]) !== Array.prototype.indexOf.apply(arguments[0],[arguments[0][j]])) {
FirstArray = arguments[0][i] - arguments[0][j];
if (FirstArray >= 0) {
SecondArray.push(FirstArray);
}
}
}
但是仍然无法正常工作,我尝试使用参数解决方案,也不起作用。
答案 0 :(得分:1)
首先要避免使用数组作为变量名,因为对于大多数浏览器,它会导致意外行为。
我认为你还需要将函数中的两个数组作为参数传递,以便比较它们。
你不需要找到索引 i 的元素索引, i 本身就是一个索引。
Array.indexOf(Array[i]) === i
以下是您可能需要的示例:
// it is important for the "array" value to start with lower case symbow, because JavaScript is case sensitive language and it already has object called "Array"
var array = [4, 6, 3, 56, 4];
function find(array)
{
// because we are surching for the minimum, the variable that will hold it needs to have the largest possible variable at the begining
var min = Number.MAX_VALUE;
for (var i = 0 ; i < array.length; i++)
{
for (var j=0 ; j < array.length; j++)
{
if (i != j)
{
var sum = array[i] - array[j];
// if it sum is greater than zero and it is the smallest sum so far we will save it in "min"
if (sum >= 0 && min > sum)
{
min = sum;
}
}
}
}
// retun the smallest sum we've encountered
return min;
}
console.log(find(array));