2015-04-24 3 views
-3

Мое название может быть ужасным, но я могу объяснить, что именно я хочу здесь. Прежде всего, я бросаю вызов самому чему-то конкретному. Даже если вы догадываетесь, что я пытаюсь выполнить, пожалуйста, держите свои ответы по теме тем, что я прошу здесь, а не общей проблемой, которую я решаю.Использование индекса для поиска позиции в матрице

У меня есть строка из 25 сгенерированных букв. Я получаю индекс буквы через str.indexOf(c) и скажем, что индекс равен 16. Визуализируйте, что str является линейным представлением таблицы 5x5, таким образом, индекс 16 будет четвертой строкой, вторым столбцом этой таблицы.

Я пытаюсь найти способ, чтобы найти строку и столбец с помощью JavaScript без зацикливания через так:

var row = 1; 
var index = str.indexOf(c) + 1; 
while(index > 5) { 
    index = index - 5; 
    row++; 
} 

С выше коде, если индекс начинается 16, мой конечный результат будет строка 4, индекс 2 - это то, что я хочу. Просто кажется, что должен быть способ сделать это с помощью алгоритма вместо цикла.

Любые мысли?

+0

Согласно нижеследующим комментариям, я чувствую себя немного глупым. Когда я пробовал простое разделение, я продолжал получать результат 3.2, чего я не хотел. Мне не приходило просто добавить 1 (так как я хочу номер строки, а не индекс). Спасибо всем за быстрые ответы, и мне жаль, что мой вопрос был таким безмозглым, что он заслужил несколько голосов. Я должен стараться построить лучшую репутацию, чтобы в будущем я мог дать полезные ответы. –

ответ

0

Почему бы просто не использовать математику?

var index = 16; 
var columnsPerRow = 5; 
row = parseInt(index/columnsPerRow) + 1; 
column = index % columnsPerRow + 1; 
+0

индекс/столбцыPerRow 16/5 = 3,2 –

+0

parseInt, справа. Спасибо за сообщение об ошибке: P – bmhkim

+0

Я принимаю это, как вы были первыми, но я обнаружил, что вам не нужно добавлять его к модулю. Мой мозг немного мертв от работы, я продолжал делать index/col и получал 3,2, что не соответствовало 4.2, которые я ожидал. Я не думал добавить один ... –

0

Вместо того, чтобы использовать петлю, вы можете просто создать функцию

function findPosition(index, cols) { 
    var rowIndex = parseInt(index/cols) + 1; 
    var colIndex = index % cols; 

    return {rowIndex: rowIndex, colIndex: colIndex} 
} 

Так в индексе строки случае это 17, а ваша матрица цв 5 вы будете называть findPosition (17, 5), и он вернется {RowIndex: 4, colIndex: 2}

1

вы тиражирование деление и модуль в этом примере кода, вы можете достичь того же, делая row = Math.floor(index/5) и col = index % 5.

var index = parseInt(prompt('Numeric Index')); 
 
var row = Math.floor(index/5) + 1; 
 
var col = index % 5; 
 

 
alert('[ ' + col + ', ' + row + ' ]');

+1

Не мог бы Math.ceil дать вам неправильный ряд, если нет остатка? – bmhkim

+0

Это будет Math.floor(), вам нужно обрезать десятичную цифру – SnoApps

+0

Обновлено, спасибо, ребята. –

0

попробовать это, вы можете просто использовать остаток (или модуль), чтобы найти столбец и целое число, чтобы найти строку.

function getPosition(str, character, gridWidth) { 
    var index = str.indexOf(character); 
    var row = Math.floor(index/gridWidth); 
    var col = index%gridWidth; 
    return {row:row, col:col}; 
} 

Затем используйте его как этот

var str = "hello sir"; 
console.log(getPosition(str, "i", 3)); 
0

Вы можете caluclate позицию, это решение зависит от матрицы, начиная с 0, 0 не 1, 1 добавить 1 к строке и столбце, если вы хотите, чтобы начать от индекса 1:

array = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] 
number = 16 
per_row = 5 
index = array.indexOf(number) 
row = Math.floor(index/ per_row) 
column = index % per_row