减去两个具有不同索引但值相同的整数

时间:2015-04-08 23:28:54

标签: javascript

给定的函数应该接受任意数组的数组。

它应该在相同索引的整数旁边减去每两个整数。

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);
            }
        }
    }

但是仍然无法正常工作,我尝试使用参数解决方案,也不起作用。

1 个答案:

答案 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));