2015-06-24 5 views
1

Я пытаюсь написать функцию, которая берет слово и письмо и находит расстояние от этой буквы от центра строки (только первое вхождение, я буду перебирать функцию).Найти расстояние от символа от середины строки

Для слов с нечетным числом букв, я могу написать

if (word.indexOf(letter) !== -1 && word.length % 2 == 1) { 
    dist = absoluteValOf(Math.floor(word.length/2) - word.indexOf(letter)); 
} 

Но даже строки, я хочу, чтобы подсчитать средние два символа в середине (то есть «а» в кролике 1 от середина). Есть ли хорошее общее решение?

+3

может дать пример ввода/вывода, чтобы помочь вам прояснить, что вы хотите? – depperm

+0

Да, вы передадите func слово и письмо (например, «кролик» и «a»), и оно вернет расстояние индекса от центра для первого появления буквы. Итак, кролик и a вернутся 1, так и кролик и я. Bunny и u вернутся 1, но кролик и b вернутся 2. Имеет ли это смысл? Спасибо – Lableable

+0

Чтобы попытаться прояснить смысл слов с четными числами букв, средние 2 буквы подсчитываются как один для целей расчета, поэтому слово можно трактовать как «ra bb it» – Lableable

ответ

1

Вы возникла проблема, потому что метод indexOf основан на нуле, а длина строки начинается с 1. Вы можете аннулировать ее следующим образом:

function distance(ch, str) { 
 
    return Math.floor(Math.abs((str.length-1)/2-str.indexOf(ch))); 
 
}; 
 
console.log(distance('b', 'Rabbit')); 
 
console.log(distance('t', 'Rabbit')); 
 
console.log(distance('u', 'Bunny')); 
 
console.log(distance('y', 'Bunny'));

Объяснение: мы уменьшаем длину строки по одному и чем разделяй найти середину по сравнению с indexOf значения. Для 6 букв слова мы получаем матрицу:

[2.5, 1.5, .5, -.5, -1.5, -2.5] 

и 5 букв слова мы получаем:

[2, 1, 0, -1, -2] 

который является реального расстояния от середины. Теперь нам нужно только floor абсолютных значений, потому что вы хотели, чтобы символ (ы) в середине имел нулевое расстояние (иначе мы бы Math.ceil их и 'b' в 'Rabbit' имели бы расстояние 1).

2

Вы должны проверить, находится ли указатель искомой буквы в первой или последней половине самого слова. Тогда:

Если в первой половине, расстояние dist = Math.abs((word.length/2) -1) - word.indexOf(letter));

Если в последней половине, расстояние dist = Math.abs((word.length/2) - word.indexOf(letter));

var word='rabbit'; 
 
var letter='a'; 
 
var dist=0; 
 
if (word.indexOf(letter) !== -1) { 
 
    if(word.indexOf(letter)<word.length/2) 
 
     dist = Math.abs(Math.floor(word.length/2)-1 - word.indexOf(letter)); 
 
    else 
 
     dist = Math.abs((word.length/2) - word.indexOf(letter)); 
 
} 
 
console.log(dist);

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