2013-09-11 2 views
0

Я пишу программу, которая определяет, находится ли число между двумя значениями в массиве.сравнить значения в массиве с числом в javascript

Вот пример массива, который я использую.

var attackArray = new Array (2); 
attackArray[0] = new Array("0","1","2","2","2","3","4"); 
attackArray[1] = new Array("2","3","2","3","2","3","4"); 

Я использую следующий код для сравнения номера с первыми двумя значениями в массиве. Затем я перебираю массив, пока не найду строку, отвечающую требованиям. Номер должен быть> = до первого номера и < = второе число.

Вот код, который я использую.

function leveltest (number) 
{ 
    var attack = attackArray.length; 


    for (var count = 0 ; count < attack; count ++) 
    { 
     if ((number >= Number(attackArray [count][0])) && (number <= Number(attackArray [count][1]))) 
     { 
     do something ; 
     } 
    } 

} 

Если кто-то может посмотреть мой код и объяснить, что я делаю неправильно.

+1

Ваш вопрос непонятен.Учитывая пример ожидаемых входов/выходов. Кроме того, вам не хватает 'attackArray [1]', и вы используете строки, когда вы должны использовать числа. –

+0

attackArray [2] должен был быть атакующим [1]? – happybuddha

+0

attack = attackArray.length; всегда будет возвращаться 2, потому что их всего 2. Вы хотите, чтобы вместо этого петли элементы в соответствующих массивах? – happybuddha

ответ

3

Я считаю, что вы пытаетесь сравнить количество для каждого диапазона чисел, определяемых значениями элементов с одинаковым индексом в элементе 0 и элемент 1 attackArray. Если это правильно, то применяется следующее.

Проблемы, присутствующие в вашем фрагменте кода были:

  1. Вы индекс неправильно в строке 3. Ваша третья линия, attackArray[2] = new Array("1","3","2","3","2","3","4"); создает новый третий элемент в attackArray, созданной на первой линии. Вместо этого, я думаю, вы хотите заполнить второй элемент attackArray, который должен быть attackArray[1] = new Array("1","3","2","3","2","3","4"); Или вы можете использовать синтаксис различных массивов, как показано ниже.

  2. В функции используется длина атакиArray var attack = attackArray.length;, для управления контуром for. Вместо этого вы захотите, var attack = attackArray[0].length;, пока attackArray[0] и attackArray[1] такой же длины. Вы можете думать об этом так, вы получали вашу длину по неправильному размеру вашего массива. Вы получали длину «вниз» вашего массива или список объектов, пробегали, чем «поперек» горизонтального dim вашего массива.

  3. В этой функции вы смущены тем, как проходить через массив, и у вас есть это attackArray [count][0] и attackArray [count][1] назад. Вместо этого они должны быть attackArray[0][count] и attackArray[1][count]. Это позволит вам правильно сравнить число с каждым элементом в элементе 0 и п тот же индекс в элементе 1.

Следующий код должен быть краткой, правильная работа кусок коды для достижения своей цели , Вы можете взять и подключить его к jsfiddle.net, и он должен работать в Chrome с помощью консоли Javascript, используемой для просмотра результатов в журнале. Вот он:

var attackArray = []; 
attackArray[0] = ["0","0","2","2","2","3","4"]; 
attackArray[1] = ["1","3","2","3","2","3","4"]; 

function leveltest (number){ 
    var attack = attackArray[0].length; 
    for (var count = 0;count < attack;count ++){ 
    if ((number >= Number(attackArray [0][count])) && 
     (number <= Number(attackArray [1][count]))) { 
     console.log(number + " matches at index " + count); 
     } 
    } 
} 
leveltest(2); 
+0

Чад Спасибо за помощь. Ваш ответ - тот, который помог мне больше всего. Я смог решить мою проблему. Ваше объяснение помогло больше, чем код. Большое спасибо. – Patrickw99

0

Похоже, ваш второй элемент в attackArray имеет неверный индекс.

attackArray[2] = new Array("1","3","2","3","2","3","4"); 

attackArray.length == 2 вы "подсчет" может доходить до 1, attackArray [1] не определен вами.

0

Второе сравнение внутри, если это неправильно. Во втором цикле это будет attackArray [1] [1], и вы создали attackArray [0] и attackArray [2].

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