2015-04-08 8 views
0

Данная функция должна принимать любой массив с любым числом целых чисел.вычитание двух целых чисел, имеющих разные индексы, но одинаковые значения

После этого следует вычесть два целых числа друг от друга рядом с целыми числами, которые имеют тот же самый индекс.

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

Так После отладки я обнаружил, что функция Найти работы с ArrayFirst, но не с ArraySecond

Вопрос: Почему функция не работает, если массив имеет два целых числа с одинаковым значением?

ОБНОВЛЕНО

Извините, ребята, что я не гнал больше деталей

Задача: Создать функцию, которая в результате даст сумму вычитания двух чисел из массива, сумма не может быть вычитание двух целые числа, которые имеют одинаковый индекс, сумма не может быть ниже 0, то ближайшая к 0 будет правильным результатом.

Пример: [4,6,3,56,4] 4-6,4-3 ... 4-4, затем 6-4,6-3 ... 6-4 затем и т.д. So результат будет 0, потому что 4-4 сумма 0

Некоторые советы

Во-первых, я думал, может быть, это что-то делать с работой на массив, но затем я использовал применить и призовет аргументы

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

Попробуйте использовать '.map()' он был разработан для этой цели – Downgoat

+0

то, что ожидаемые результаты? Не совсем понятное описание. Также почему вы определяете FirstArray как массив, а затем меняете его тип на целое? – charlietfl

+1

Когда два целых числа в массиве имеют одинаковое значение, их вычитание приведет к '0', и это будет вдавлено в' SecondArray'. Наименьшее значение, которое вы допустили в этом массиве, равно '0', поэтому' ResultArray' в конечном итоге будет '0'. Ожидаете ли вы другого значения? – HankScorpio

ответ

1

Прежде всего, избегайте использования Array как имя переменной, потому что для большинства браузеров это приведет к неожиданному поведению.

Я думаю, вам также нужно передать два массива в своей функции в качестве параметров, чтобы сравнить их.

И вам не нужно, чтобы найти индекс элемента с индексом я, то я сам является индексом.

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)); 
+0

Хороший намек, я изменил его уже, но я не делаю достаточно для объяснения, я сделал некоторые обновления по вопросу. – IOR88

+0

Я слишком усложнил все, ваше решение прекрасно для меня, но мое любопытство не удовлетворено. Почему это, если условие не работает, когда я сравниваю array.indexOf (array [i])? На самом деле это работает, но только тогда, когда массив не имеет двух целых чисел, которые имеют одинаковое значение. – IOR88

+0

Ваш код работает нормально, единственная ошибка появляется снова от indexOf в случае * ArraySecond * ArraySecond.indexOf (ArraySecond [4]) вернет 0 вместо 4, потому что * indexOf * aways возвращает первый индекс с этим значением , –

Смежные вопросы